Autor Zpráva
pajadvorak
Profil
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
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
Kajman:
To vypadá dobře. Děkuji.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0