Zadejte hledaný výraz...

mysql join na minimální hodnotu

antal
verified
rating uzivatele
14. 5. 2009 22:16:20
Mám shop, v kterém jsou různé produkty a každý produkt má ještě nějaké své varianty. Každá varianta stojí jinou částku. V mysql je to jako tabulka produkty a tabulka varianty (ktera obsahuje id produktu, ke kterému se varianta váže).
A teď otázka: do výpisu produktů v dané kategorii potřebuju dostat nejnižší cenu (přesněji: vše z tabulky produkty a za tabulky varianty pak ještě cenu a ID varianty). Jak na to?
Když dám
tak mi to vybere sice minimální cenu, ale ID varianty neodpovídá tomu řádku s nejnižší cenou (ID se vybere to první, které odpovídá produktu).
Poradí někdo?
14. 5. 2009 22:16:20
https://webtrh.cz/diskuse/mysql-join-na-minimalni-hodnotu#reply303972
power
verified
rating uzivatele
(5 hodnocení)
14. 5. 2009 22:20:42
Napsal antal;286219
Mám shop, v kterém jsou různé produkty a každý produkt má ještě nějaké své varianty. Každá varianta stojí jinou částku. V mysql je to jako tabulka produkty a tabulka varianty (ktera obsahuje id produktu, ke kterému se varianta váže).
A teď otázka: do výpisu produktů v dané kategorii potřebuju dostat nejnižší cenu (přesněji: vše z tabulky produkty a za tabulky varianty pak ještě cenu a ID varianty). Jak na to?
Když dám
tak mi to vybere sice minimální cenu, ale ID varianty neodpovídá tomu řádku s nejnižší cenou (ID se vybere to první, které odpovídá produktu).
Poradí někdo?
místo varianty.id dej do SELECTu varianty.id AS id.
14. 5. 2009 22:20:42
https://webtrh.cz/diskuse/mysql-join-na-minimalni-hodnotu#reply303971
antal
verified
rating uzivatele
14. 5. 2009 22:28:55
Napsal power;286224
místo varianty.id dej do SELECTu varianty.id AS id.
To nepomůže. AS udělá jen to, že vytvoří alias (resp. přejmenuje) sloupec ve výsledku. Já už to tam mám (varianty.id AS v_id) protože jinak by mi to kolidovalo s ID produktu. Ale můj problém to neřeší...
14. 5. 2009 22:28:55
https://webtrh.cz/diskuse/mysql-join-na-minimalni-hodnotu#reply303970
Hubert Frey
verified
rating uzivatele
(11 hodnocení)
14. 5. 2009 23:05:32
Chápu to správně, že chcete získat variantu s nejnižší cenou? Pak by asi mělo být GROUP BY varianty.produkt pokud je tento atribut IDčkem produktu
14. 5. 2009 23:05:32
https://webtrh.cz/diskuse/mysql-join-na-minimalni-hodnotu#reply303969
Kazan
verified
rating uzivatele
(4 hodnocení)
15. 5. 2009 13:34:16
Pokud bude mit jeden produkt dve varianty o stejne minimalni cene, vypisou se obe. Pokud chcete jen jednu, tak bud pouzijete na variantu GROUP BY (neni jiste, ktery z vysledku dostanete), nebo pridejte dalsi podminku, treba na vyber podle nejvetsiho id_v
15. 5. 2009 13:34:16
https://webtrh.cz/diskuse/mysql-join-na-minimalni-hodnotu#reply303968
antal
verified
rating uzivatele
15. 5. 2009 13:42:41
Díky za řešení, ale už jsem to vymyslel jinak (jen na 1 subselect):
Doufal jsem, že mysql umí pracovat s poli třeba jako postgre, ale ono zřejmě neee... :mad:
15. 5. 2009 13:42:41
https://webtrh.cz/diskuse/mysql-join-na-minimalni-hodnotu#reply303967
Kazan
verified
rating uzivatele
(4 hodnocení)
15. 5. 2009 14:27:11
Napsal antal;286456
Díky za řešení, ale už jsem to vymyslel jinak (jen na 1 subselect):
Doufal jsem, že mysql umí pracovat s poli třeba jako postgre, ale ono zřejmě neee... :mad:
Jste si jist, ze to dela to co jste chtel? Ten Vas dotaz dle meho dobre svaze produkt s id nejlevnejsi varianty (v_id), ale minimalni cena (v_cena) uz tomu v_id nebude odpovidat. Taky vybere vzdy jen prvni nejlevnejsi variantu .. ale to je mozna to co chcete
15. 5. 2009 14:27:11
https://webtrh.cz/diskuse/mysql-join-na-minimalni-hodnotu#reply303966
antal
verified
rating uzivatele
15. 5. 2009 15:13:58
Napsal Kazan;286480
Jste si jist, ze to dela to co jste chtel? Ten Vas dotaz dle meho dobre svaze produkt s id nejlevnejsi varianty (v_id), ale minimalni cena (v_cena) uz tomu v_id nebude odpovidat. Taky vybere vzdy jen prvni nejlevnejsi variantu .. ale to je mozna to co chcete
Jsem si jist, že to dělá to co má. Už jsem to odzkoušel na shopu. Cenu vyberu podle MIN a odpovídající ID pak subselectem seřazeným podle ceny od nejnižší a omezeným na 1 řádek (tedy mi to vybere ID pro nejnižší cenu).
15. 5. 2009 15:13:58
https://webtrh.cz/diskuse/mysql-join-na-minimalni-hodnotu#reply303965
duben
verified
rating uzivatele
(49 hodnocení)
15. 5. 2009 15:21:13
Pokud chces jednu nejnizsi cenu daneho produkut, tady je nejjednodusi reseni:
15. 5. 2009 15:21:13
https://webtrh.cz/diskuse/mysql-join-na-minimalni-hodnotu#reply303964
Kazan
verified
rating uzivatele
(4 hodnocení)
15. 5. 2009 15:39:54
Napsal duben;286511
Pokud chces jednu nejnizsi cenu daneho produkut, tady je nejjednodusi reseni:
Pozadavek je, dostat i id nejlevnejsi varianty. A to mam dojem, kvuli tomu group by, nepujde dostat.
15. 5. 2009 15:39:54
https://webtrh.cz/diskuse/mysql-join-na-minimalni-hodnotu#reply303963
duben
verified
rating uzivatele
(49 hodnocení)
15. 5. 2009 16:12:32
Napsal Kazan;286527
Pozadavek je, dostat i id nejlevnejsi varianty. A to mam dojem, kvuli tomu group by, nepujde dostat.
Tvuj dojem je spatny. Pokud tomu neveris udelej si testovaci data.
15. 5. 2009 16:12:32
https://webtrh.cz/diskuse/mysql-join-na-minimalni-hodnotu#reply303962
Ivan L.
verified
rating uzivatele
15. 5. 2009 16:16:28
Napsal antal;286456
Díky za řešení, ale už jsem to vymyslel jinak (jen na 1 subselect)
Bez subselectu (a snad i funkční):
A kdybys to ještě chtěl setřídit třeba podle id:
15. 5. 2009 16:16:28
https://webtrh.cz/diskuse/mysql-join-na-minimalni-hodnotu#reply303961
Kazan
verified
rating uzivatele
(4 hodnocení)
15. 5. 2009 16:46:26
Napsal duben;286557
Tvuj dojem je spatny. Pokud tomu neveris udelej si testovaci data.
Ja si je udelal. Samotny dotaz na cenu funguje, ale pokud do subselectu pridas varianty.id AS id_v a v hlavnim dotazu se ptas na: produkty.*, varianty.cena, varianty.id_v .. tak dostanes vzdy id prvni varianty produktu, ne te jejiz cena je nejmensi .. Nebo sis snad moji poznamku vylozil jinak?
---------- Doplňující příspěvek odeslán v 16:48 ----------
Napsal Ivan L.;286562
Bez subselectu (a snad i funkční):
A kdybys to ještě chtěl setřídit třeba podle id:
Pekne, a kde tam je id varianty? (:
15. 5. 2009 16:46:26
https://webtrh.cz/diskuse/mysql-join-na-minimalni-hodnotu#reply303960
Ivan L.
verified
rating uzivatele
15. 5. 2009 17:10:45
Hups, to mám z toho, že nečtu pořádně zadání. Koukám, že jsem vlastně napsal to co v prvním příspěvku nefunguje ;) Omlouvám se, sypu si popel na hlavu.
15. 5. 2009 17:10:45
https://webtrh.cz/diskuse/mysql-join-na-minimalni-hodnotu#reply303959
duben
verified
rating uzivatele
(49 hodnocení)
15. 5. 2009 17:56:45
Napsal Kazan;286585
Ja si je udelal. Samotny dotaz na cenu funguje, ale pokud do subselectu pridas varianty.id AS id_v a v hlavnim dotazu se ptas na: produkty.*, varianty.cena, varianty.id_v .. tak dostanes vzdy id prvni varianty produktu, ne te jejiz cena je nejmensi .. Nebo sis snad moji poznamku vylozil jinak?
Nevsiml jsem si ze chce i ID te varianty, pak mas samozrejme pravdu.
---------- Post was amended at 18:25 ----------
Pak je tedy mozne toto reseni, ale pokud bude mit jeden produkt 2 varianty stejne ceny ukaze se zaznam 2x, coz je ale dle logiky zadani spravne, protoze pak ma nejlevnejsi cena dve ruzne id_varianty. Pokud bychom chteli eliminovat i tuhle duplicitu, tak to bude zase grupovani pres vsechny pole a varianta_id bude zase treba MIN (nebo MAX zalezi jak s tim potrebujeme pracovat). Tri vnorene SELECTY jsou teda uz slusna prasarna, ale jine reseni me nenapadlo, je patek vecer a moc mi to uz nemysli :)
15. 5. 2009 17:56:45
https://webtrh.cz/diskuse/mysql-join-na-minimalni-hodnotu#reply303958
Pro odpověď se přihlašte.
Přihlásit