Filtrovani a pocitani zaznamu ve dvou tabulkach – MySQL – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Filtrovani a pocitani zaznamu ve dvou tabulkach – MySQL – Fórum – Programujte.comFiltrovani a pocitani zaznamu ve dvou tabulkach – MySQL – Fórum – Programujte.com

 

michal
~ Anonymní uživatel
683 příspěvků
25. 6. 2012   #1
-
0
-

Nevim si rady s nasledujicim, mam nasledujici prikaz:

select plan.cv, plan.quantity, count(manufacturing_logs.cv) as vyrobeno from plan, manufacturing_logs where manufacturing_logs.cv = plan.cv group by plan.cv

ktery me vypise nasledujici:

cv quantity vyrobeno
1076424400 10 10
1076424401 560 560
1076424402 560 560
1076424403 560 200

coz je zcela v poradku, ale jeste bych potreboval, aby se me provedl filtr podle podminky vyrobeno < plan.quantity, tedy aby ve vysledku zustal pouze jeden jediny radek, a to ten posledni kde je splnena podminka. Nevim si s tim rady, prosim o postrceni. Dekuji

Nahlásit jako SPAM
IP: 194.213.39.–
KIIV
~ Moderátor
+43
God of flame
25. 6. 2012   #2
-
0
-

where (manufacturing_logs.cv = plan.cv) and (plan.quantity > vyrobeno)

nefunguje?

Nahlásit jako SPAM
IP: 62.168.56.–
Program vždy dělá to co naprogramujete, ne to co chcete...
michal
~ Anonymní uživatel
683 příspěvků
25. 6. 2012   #3
-
0
-

prave ze nefunguje, pise ze nezna sloupec "vyrobeno" - to jsem zkousel jako prvni

Nahlásit jako SPAM
IP: 194.213.39.–
KIIV
~ Moderátor
+43
God of flame
25. 6. 2012   #4
-
0
-

tak jeste muzes zkusit klauzuli  HAVING plan.quantity > vyrobeno

Nahlásit jako SPAM
IP: 62.168.56.–
Program vždy dělá to co naprogramujete, ne to co chcete...
michal
~ Anonymní uživatel
683 příspěvků
25. 6. 2012   #5
-
0
-

No to je ono :-) dekuju moc, HAVING jsem vubec neznal.

No jeste jsem zaroven ale prisel na to, ze me to vypisuje jen ty zaznamy ktere existuji zaroven v obou tabulkach. jenze v tabulce plan je tech zaznamu ve sloupci CV vice, ja bych potreboval vypsat vsechny (s tim ze ty co nejsou v druhe tabulce budou mit v poli vyrobeno nulu samozrejme)

Nahlásit jako SPAM
IP: 194.213.39.–
KIIV
~ Moderátor
+43
God of flame
25. 6. 2012   #6
-
0
-

#5 michal
Left/right join .. ale tezko rict jak to bude pocitat ...

Nahlásit jako SPAM
IP: 62.168.56.–
Program vždy dělá to co naprogramujete, ne to co chcete...
michal
~ Anonymní uživatel
683 příspěvků
25. 6. 2012   #7
-
0
-

Hraju si s JOIN jak s LEFT tak RIGHT a proste to nedela to co chci, aby to vypsalo seznam pouzitych cisel CV z jedne i z druhe tabulky, vypisuje me to stale jen z jedne ... 

Nahlásit jako SPAM
IP: 194.213.39.–
simas0
Newbie
26. 6. 2012   #8
-
0
-

select plan.cv, plan.quantity, count(m.cv) as vyrobeno from plan LEFT JOIN  manufacturing_logs m  ON plan.cv = m.cv where m.cv = plan.cv group by plan.cv, plan.quantity HAVING count(*)>1

Toto ti vrati vsechno z tabulky plan a priradi zaznamy z manufacturing a slouci podle sloupcu plan.cv, plan.quantity.

Pokud by jsi použil RIGHT JOIN tak to vrátí všechny záznamy z manufacturing.

Pokud máš cv v obou tabulkách a nemají mezi sebou referenci (tzn. např. manufacturing má nějaké cv, ale to cv neexistuje v plan), tak budeš muset nejdříve sloučit všechny cv do jedné tabulky a poté až přiřadit záznamy z tabulky manufacturing.

Nahlásit jako SPAM
IP: 91.213.122.–
26. 6. 2012   #9
-
0
-

simas: diky, tohle me ale neukaze zaznamy z tabulky plan, ktere nemaji zadne zaznamy v tabulce manufacturing_logs a to ja prave potrebuju. nevim zda to vubec lze ... ja potrebuju zobrazit oboji, tedy potrebuju vypsat vsechny zaznamy z tabluky plan a tam kde existuji pod stejnym cislem cv nejake zaznamy v tabulce manufacturing_logs, tak je potrebuju spocitat kolik jich v teto tabulce je a tam kde neexistuji tak vratit nulu ...

Nahlásit jako SPAM
IP: 194.213.39.–
simas0
Newbie
26. 6. 2012   #10
-
0
-

#9 michal.siman
Všechno špatně ... opsal jsem ten kód blbě jak jsem to editoval   . Zapoměl jsem tam tu klauzuly WHERE ...

Co takto?

select plan.cv, count(*) as vyrobeno from plan LEFT JOIN  manufacturing_logs m  ON plan.cv = m.cv  group by plan.cv HAVING count(*)>1

Nahlásit jako SPAM
IP: 91.213.122.–
26. 6. 2012   #11
-
0
-

ne, ten druhy kod ma stejny vysledek jako ten prvni. nejak to obejdu jinak. v kazdem pripade diky za pomoc.

Nahlásit jako SPAM
IP: 194.213.39.–
simas0
Newbie
26. 6. 2012   #12
-
0
-

#10 simas
Klauzule HAVING slouží pro zobrazení dat z agregační funkce, tzn. v tvém případě count(*), pokud to nechceš omezovat, tak HAVING smaž a bude to fungovat ...

Nahlásit jako SPAM
IP: 91.213.122.–
26. 6. 2012   #13
-
0
-

To jsem take zkousel, ani bez toho to nedela to co chci.

Zkusim jeste popsat priklad, mam tabulku knih:

1 - kniha dobra

2 - kniha nejlepsi

3 - kniha hrozna

Pak mam tabulku vypujcek:

1- vypujcena kniha dobra (1)

2 - vypujcena kniha nejlepsi (2)

3 - vypujcena kniha dobra (1)

No a ted potrebuju vypsat vsechny knihy a vedle nich vypocitat kolikrat byli vypujceny. V mem pripade plan jsou knihy a manufacturing_logs jsou ty vypujcky. Jenze me to nevypise knihy ktere nebyli ani jednou vypujceny, ktere bych do toho prehledu take potreboval.

Nahlásit jako SPAM
IP: 194.213.39.–
simas0
Newbie
26. 6. 2012   #14
-
0
-

select * from plan p LEFT JOIN ( SELECT id, count(*) as vysledek FROM history GROUP BY id) x ON x.id=p.id;

Nahlásit jako SPAM
IP: 91.213.122.–
26. 6. 2012   #15
-
0
-

diky moc, to je to co jsem hledal. diky, jdu si to rozebrat a naucit se to pouzivat na priste.

Nahlásit jako SPAM
IP: 194.213.39.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 18 hostů

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý