Autor | Zpráva | ||
---|---|---|---|
danhill Profil |
#1 · Zasláno: 27. 3. 2021, 16:34:59
Zdravím,
potřebuji poradit jak sestavit dotaz MYSQL. Jde o to, že mám dvě tabulky. V jedné tabulce jsou testy. Je tam mimo jiné ID a název testu. V druhé tabulce mám otázky a odpovědi. Tedy je tam ID otázky ID testu z první tabulky, otázka samotná a odpověd ABC... Tak a já bych potřeboval jeden dotaz, který mi vybere všechny testy, u kterých chybí minimálně jedna odpověď, tedy hodnota ve sloupci answer je výchozí NULL. Ovšem problém je v tom, že na to potřebuji jít obráceně, tedy jako výchozí tabulku potřebuji zachovat SELECT * FROM test a nikoli abych právě JOINoval z tabulky Question do tabulky test, tak bych to dokázal, ale obráceně nevím zda je to vůbec možné, protože samozřejmě otázek je vždy více než testů. Ale vím, že zde jste SQL kouzelníci a dokážete všechno :) . Děkuji moc. |
||
Kajman Profil |
#2 · Zasláno: 27. 3. 2021, 17:03:06
Zkuste něco jako
SELECT t.*, ch.chybi FROM testy t JOIN (SELECT o.id_testu, Count(*) chybi FROM otazky o WHERE o.answer IS NULL GROUP BY o.id_testu) ch ON t.id = ch.id_testu |
||
danhill Profil |
#3 · Zasláno: 27. 3. 2021, 18:35:02
Mockrát děkuji :) Jdu to vyzkoušet.
|
||
danhill Profil |
#4 · Zasláno: 28. 3. 2021, 10:59:10
Nasazeno a funguje.
Ještě jednou děkuji za navedení na správnou cestu. Samotnému by mi to nedocvaklo. |
||
Časová prodleva: 5 měsíců
|
|||
danhill Profil |
#5 · Zasláno: 16. 8. 2021, 14:12:26
Kajman:
Zdravím. Potřebuji se znovu vrátit k tomuto dotazu. Musel jsem použít LEFT JOIN aby mi dotaz vracel všechny záznamy z mateřské tabulky "testy". Výsledek pak správně vypíše testy a kolik odpovědí chybí k danému testu. V tabulce s testy mám nyní ale i testy, které nemají žádné otázky v tabulce s otázkami a odpovědmi. A se stávajícím dotazem tohle nerozliším, výsledek bude NULL i u testu, který vlastně nemá žatím žádnou otázku. Tedy stávají dotaz potřebuji rozšířit tak, aby vracel buď hodnotu NULL, jakože prostě test nemá žádné otázky, 0 nebo něco jiného kdy prostě test má vyplněné všechny odpovědi a nebo int 1-x , kdy test sice otázky má, ale chybí u nich odpověď či odpovědi. |
||
Kajman Profil |
#6 · Zasláno: 16. 8. 2021, 14:36:02
SELECT t.*, coalesce(ch.otazek,0) otazek, ch.chybi FROM testy t LEFT JOIN (SELECT o.id_testu, Count(*) otazek, Count(*)-Count(o.answer) chybi FROM otazky o GROUP BY o.id_testu) ch ON t.id = ch.id_testu |
||
danhill Profil |
#7 · Zasláno: 16. 8. 2021, 17:05:10
Kajman:
Paráda, moc děkuji, to jsem přesně potřeboval. |
||
Časová prodleva: 3 roky
|
0