Autor | Zpráva | ||
---|---|---|---|
pajadvorak Profil |
#1 · Zasláno: 17. 12. 2020, 13:49:58
Ahoj,
mám tento dotaz mysql SELECT kod, celkem_ks_sklad FROM stav WHERE doklad = '$doklad[$i]' AND dodavatel='$dodavatel' group by kod order by id DESC
tabulka stav +-------------+--------------------------+---------+ | kod | celkem_ks_sklad | prijato | +-------------+--------------------------+---------+ | 123 | 8 | 2 | +-------------+--------------------------+---------+ | 123 | 12 | 4 | +-------------+--------------------------+---------+ Prijato = příjem na sklad, který se zapíše do jiné tabulky, kde se pak zaznamená celkový stav = dostupnost. V tabulce stav jsou pak zaznamenávány průběžné pohyby na kartě. A já následně provádím kontrolní porovnání v tabulkách. Dostupnost = celkem_ks_sklad. Problém nastává, že výše uvedený dotaz mi vrátí kod 123 s celkem_ks_sklad = 8. Já potřebuji vždy dostat po použití GROUP BY poslední zápis daného kódu. Tedy kód 123 a celkem_ks_sklad = 12. Order by mi v tomto smyslu nefunguje. Jak toho prosím docílím? Děkuji moc za radu. |
||
Kajman Profil |
#2 · Zasláno: 17. 12. 2020, 13:57:24
Pro vývoj si v mysql zapněte ONLY_FULL_GROUP_BY, pak to takovéto špatně formulované dotazy nepovolí.
Pokud je id jedinečné, půjde např. něco takového SELECT s.* FROM stav s JOIN (SELECT Max(id) maxid FROM stav WHERE doklad = '$doklad[$i]' AND dodavatel = '$dodavatel' GROUP BY kod) m ON s.id = m.maxid Pozor na ošetření vstupů na sql injection. |
||
pajadvorak Profil |
#3 · Zasláno: 17. 12. 2020, 20:08:01
Kajman:
To vypadá dobře. Děkuji. |
||
Časová prodleva: 3 roky
|
0