Autor Zpráva
romulus856
Profil
Zdravím,
aktuálně řeším menší problém. Mám tabulku sklad, do které se mi zapisuje historie změn počtu položek z tabulky items a vytvářím filty, na pohodlné zobrazení potřebných dat.
Tabulka má strukturu:
id polozka pocet datum user typ puvodnipocet

Všechny sloupce krom ID modou být duplicitní. Teď ke konkrétnímu problému. Potřebuju vyfiltorovat všechny položky, které mají ve sloupci "pocet" hodnotu <=0 a zároveň když už se tato hodnota zvíšila, tak aby se tento řádek již nevypisoval. Ideální by bylo řešit to nějak přes subdotaz v podmínce WHERE, jelikož těch filtrů je tam více a výsledný dotaz skládá PHP, dle zvolených filtrů uživatelem.
Chtěl jsem to řešit následovně:

SELECT * FROM sklad WHERE polozka<=0 AND id=(SELECT MAX(id) FROM sklad WHERE polozka="polozka_nadřazeného_selektu")

Jak můžu definovat podmínku, aby mi to bralo hodnotu z nadřazeného selektu?

Zkoušel jsem hledat na google, ale nic použitelnýho jsem nenašel. Pokud by na to šel někdo jinak, rád se nechám poučit.

Všem děkuji za případnou pomoc.
Casero
Profil
romulus856:
a zároveň když už se tato hodnota zvíšila, tak aby se tento řádek již nevypisoval.
Nerozumím, co to znamená. Nemohl bys uvést několik řádků té tabulky sklad a označit, které chceš vybrat a které ne?
romulus856
Profil
Určitě bych mohl. Jdem mi o to, aby se mi vypsal řádek 34 a aby se mi nezobrazlili řádky 35 a 36 jelikož tam byl vložen nový záznam 37, ve kterém se položky "naskladnili". Jinak řešeno potřebuju uživateli dát možnost zjistit, které položky nemá aktuálně skladem, aby je mohl doobjednat.


33 6 786 2012-05-05 admin Zpracování objednávky číslo: 10000043 787
34 11 0 2012-05-05 admin Zpracování objednávky číslo: 10000043 43
35 12 0 2012-05-05 admin Zpracování objednávky číslo: 10000043 0
36 12 0 2012-05-05 admin Mazání položky 0
37 12 12 2012-05-05 admin aktualizace polozky 0
Casero
Profil
romulus856
Pokud chceš pouze jeden záznam položky, tak:
select * FROM sklad group by polozka having max(pocet)<=0

Pokud chceš vypsat všechny záznamy, kde je počet 0, tak:
select * from sklad where polozka not in (select polozka FROM sklad group by polozka having max(pocet)>0)
romulus856
Profil
Především děkuju, že se mi snažíš pomoct. Toto řešení není úpně to co bych potřeboval, jelikož když se mi "pocet" opět dostane na hodnotu 0, tak se mi již podruhé nevyfiltruje. Proto jsem to chtěl řešit viz první příspěvek. Logika byla taková, zjistit nejvyžší ID polozky z tabulky sklad a pokud by souhlasil s tím, který splňuje podmínku, že je "pocet"<=0 , tak by se vypsala, pokud by bylo ID položky vyžší tak by došlo k nesplnění podmínky a záznam by se nevypsal. Tímto by se odstranili i staré záznamy, které jsou v tento moment pro uživatele nezajímavé.

Záznamy v tabulce sklad přibývají s každou změnou počtu jednotlivých položek. Je to automatizované, aby když někdo vyřizuje objednávky, tak aby se mu automaticky položky odebírali ze skladu a důvod změny počtu byl zaznamenán právě v této tabulce. Důvod tohoto filtrování je, aby jiný uživatel zjistil všechny položky, které nejsou aktuálně skladem a mohl je objednat.

Omlouvám se za popis, ale hrozně blbě se tato situace popisuje :)
Casero
Profil
Nevím, zda jsem to už pochopil, ale nestačí teda jen:
select * from sklad where pocet<=0 and id in (select max(id) FROM sklad group by polozka)
romulus856
Profil
Tak to je přesně to co jsem potřeboval. Mnohokrát děkuji. Už mi to forčí, jak má.

Ještě jednou díky

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: