Autor | Zpráva | ||
---|---|---|---|
andynewcastleth Profil |
#1 · Zasláno: 2. 12. 2019, 08:18:41
![]() Vidíme, že #1 je hlavní příspěvek a #2 #3 #4 #5 #6 #7 #8 #9 jsou reakce. Chci najít reakce, které nemají hlavní příspěvek (id_reakce má neexistující ID). Nechci to ale dělat skrz while() uvnitř while() což bych dokázal, chci jeden SQL dotaz. |
||
Tomášeek Profil |
#2 · Zasláno: 2. 12. 2019, 08:53:50
andynewcastleth:
To by měl řešit left join s podmínkou na null, ne? |
||
Keeehi Profil |
andynewcastleth:
SELECT * FROM tabulka WHERE id_reakce != '' AND id_reakce NOT IN ( SELECT id FROM tabulka ) Trochu mi dělá "starosti" ten sloupec id_reakce. To je to textový sloupec aby tam mohl být prázdný řetězec? Proč to není číselný nullable sloupec? Pokud je číselný a jen NULL hodnoty takhle zobrazuje PMA tak bude třeba upravit tu první podmínku na IS NOT NULL. |
||
andynewcastleth Profil |
id_reakce je TEXT, to jsem si ani nevšiml....
Jinak ten SQL dotaz funguje krásně. Děkuji. |
||
lionel messi Profil |
andynewcastleth:
Trochu sa vzdialim od pôvodnej otázky. Ak je to možné, zamyslel by som sa nad databázovým návrhom. Začal by som vyčlenením reakcií do samostatnej tabuľky (v praxi by sa určite hodilo vyčleniť do sólo tabuľky aj odosielateľov). To, čo chceš spraviť teraz, stále budeš môcť spraviť jediným SQL príkazom. Mierne zdokonalená verzia tvojho návrhu by vyzerala takto: Tabuľka hlavni_prispevky id | titulek | url | text 1 | Prodám bouranou Ibizu | prodam-bouranou-ibizu-1 | Prodám ojeté auto. 2 | Koupím nebourané Audi | koupim-nebourane-audi-2 | Koupím krásné Audi Q5. Tabuľka reakce id_reakce | id_prispevku | odesilatel | text 1 | 1 | Michal K. | Dobrý den, měl bych zájem. Mohu se zeptat na cenu? 2 | 1 | Jana | Zajímaly by mě fotky auta. 3 | 2 | Richard | Hezký bourák! 4 | 3 | Dan Přibáň | Píšu z amazonské džungle. Do vlákna o trabantech jsem se ovšem asi netrefil. 5 | NULL | Niki Lauda | Das hat nicht geklappt! A SQL dotaz, ktorým by sa pri tomto návrhu dalo zistiť to, čo potrebuješ v [#1] by vyzeral takto: SELECT * FROM hlavni_prispevky h RIGHT JOIN reakce r ON h.id = r.id_prispevku WHERE h.id IS NULL |
||
Tomášeek Profil |
#6 · Zasláno: 2. 12. 2019, 23:31:16
lionel messi:
„A SQL dotaz, ktorým by sa pri tomto návrhu dalo zistiť to, čo potrebuješ v [#1] by vyzeral takto:“ Ten dotaz může vypadat hodně podobně i při datech v jedné tabulce, bude se joinovat sama na sebe. Tak nějak jsem to zamýšlel svou odpovědí já. Protože ale nejsem DB specialista, nedokážu bez vyzkoušení říci, jestli to bude rychlejší, než Keeehiho řešení. To bude chtít buď někoho, kdo to má více v oku, nebo to změřit. |
||
andynewcastleth Profil |
#7 · Zasláno: 3. 12. 2019, 06:31:52
Ano, mít vše v jedné tabulce není ideální. Ve skutečnosti je to ještě horší, neposlal jsem ani screenshot celé tabulky = obsahuje i další data. Jako např. počet shlédnutí konkrétních hlavních příspěvků atd.
Kdyby to bylo rozdělené na další tabulky, bylo by to lepší. Ale co nadělám, nebudu kvůli tomu přepisovat kompletně celý web.... . |
||
Kcko Profil |
#8 · Zasláno: 3. 12. 2019, 11:20:58
lionel messi:
Vazba rodic - dítě v jedné tabulce je IMHO zcela normální. Nevidím důvod proč by na to měl mít 2. To jestli tam mají smysl i další jiná data už je věc jiná. |
||
Keeehi Profil |
Kcko:
„Nevidím důvod proč by na to měl mít 2.“ Protože to jsou sémanticky dvě rozdílné věci. Je to podobné jako články a komentáře. A ty taky nepatří do jedné tabulky. andynewcastleth tomu sice říká jinak ale vazba je to obdobná. |
||
Kcko Profil |
#10 · Zasláno: 3. 12. 2019, 12:38:49
Keeehi:
Moment, asi jsem nepochopil, ale jsou to komentáře s možností reakce ne? (Takže vazba rodič - dítě). |
||
Keeehi Profil |
#11 · Zasláno: 3. 12. 2019, 12:52:33
Kcko:
Ne screenshotu je jen jedna úroveň. Ale to je vedlejší, i kdyby to byly víceúrovňové komentáře tak to nic moc nemění. Pro mě je hlavním ukazatelem na screenshotu to, že jsou tam téměř prázdné sloupce. Ta URL je pro mě taky silným vodítkem. |
||
Časová prodleva: 5 let
|
0