Zadejte hledaný výraz...

Distinct nefunguje pri inner join

Creator13
verified
rating uzivatele
(49 hodnocení)
4. 9. 2018 13:17:13
Potrebujem urobit select, ktory by mi vracal iba jedno id produktu
SELECT DISTINCT mb_variant.id_product as id_product, mb_variant.id_size, mb_variant.id_color, mb_product.url_sk, mb_product.title_sk, mb_variant.id, mb_variant.price, mb_variant.price_old, mb_variant.stock1 FROM mb_product INNER JOIN mb_product_category ON mb_product.id = mb_product_category.id_product INNER JOIN mb_variant ON mb_product.id = mb_variant.id_product WHERE mb_product_category.id_category IN (21) AND mb_variant.price > 0 AND mb_variant.id_color = 3 ORDER BY mb_variant.stock1 DESC
Tento zapis mi dava vyhodi viacero id_product. Ako sa tomu vyhnut? Evidentne to mam spatne.
4. 9. 2018 13:17:13
https://webtrh.cz/diskuse/distinct-nefunguje-pri-inner-join/#reply1364026
hm
verified
rating uzivatele
(20 hodnocení)
4. 9. 2018 13:27:08
misto distinct, pouzij group by (pred order by pridej GROUP BY mb_variant.id_product)
4. 9. 2018 13:27:08
https://webtrh.cz/diskuse/distinct-nefunguje-pri-inner-join/#reply1364025
vlnk
verified
rating uzivatele
(4 hodnocení)
4. 9. 2018 13:57:06
Mělo by stačit umazat "as id_product"
4. 9. 2018 13:57:06
https://webtrh.cz/diskuse/distinct-nefunguje-pri-inner-join/#reply1364024
TomasX
verified
rating uzivatele
(4 hodnocení)
4. 9. 2018 14:17:58
nefunguje ti to nejspíš proto, že výsledek obsahuje sloupec, který ti to rozmnožuje a je unikátní, prakticky asi cokoliv z mb_variant. Předpokládám, že chceš pro každý produkt vytáhnout pouze jeden řádek s jedinou variantou, je to tak? Group by v tomhle případě nepomůže.
Tohle třeba vytáhne každý product_id pouze jedenkrát a vezme u něho variantu s nejnižším ID, která splňuje podmínky na barvu a cenu, je to co chceš? Co když produkt má více variant, které vyhovují?
4. 9. 2018 14:17:58
https://webtrh.cz/diskuse/distinct-nefunguje-pri-inner-join/#reply1364023
Creator13
verified
rating uzivatele
(49 hodnocení)
4. 9. 2018 14:20:21
Napsal Aleš Jiříček;1483257
misto distinct, pouzij group by (pred order by pridej GROUP BY mb_variant.id_product)
Vdaka, vyzera, ze to funguje
4. 9. 2018 14:20:21
https://webtrh.cz/diskuse/distinct-nefunguje-pri-inner-join/#reply1364022
Jan
verified
rating uzivatele
4. 9. 2018 15:05:54
Napsal Creator13;1483263
Vdaka, vyzera, ze to funguje
Ale pozor na GROUP BY, pokud ti někdo v budoucnosti upgraduje databázi (mysql) na verzi, kde bude striktní pravidlo: ONLY_FULL_GROUP_BY, pak to pravidlo budeš muset vypnout, nebo budeš muset přepsat SQL dotaz (aby GROUP BY obsahovalo všechny tázané sloupce - v tomhle ohledu je lepší se GROUP BY vyhnout, pokud to jde)
4. 9. 2018 15:05:54
https://webtrh.cz/diskuse/distinct-nefunguje-pri-inner-join/#reply1364021
Creator13
verified
rating uzivatele
(49 hodnocení)
17. 9. 2018 16:06:35
No nastal problem. Na webhostingu je striktne pravidlo only_full_group_by
Na podpore mi dali info
je mozne ten mod vypnut per connection, ked sa v kode pripajate k db
Poradi mi niekto ako na to? Zatial sa mi nepodaril najst navod na vypinanie jednotlivych modov.
Skusal som vypnut v phpmyadmine, ale prava ma nepustia ulozit zmeny v premennej sql_mode.
17. 9. 2018 16:06:35
https://webtrh.cz/diskuse/distinct-nefunguje-pri-inner-join/#reply1364020
Jan
verified
rating uzivatele
17. 9. 2018 17:24:42
Možností může být víc:
při připojení k databázi "nastavíte" sql mode, např:
tím ale smažete veškeré nastavení sql modu, což není dobré, proto je lepší vymazat konkrétně jen to jedno pravidlo:
Nebo si vypsat všechny "vlastní" pravidla (příklad v PHP):
Těch možností může být více, na základě verze databáze nastavit zda fungujete ve strict modu nebo ne, atd.
17. 9. 2018 17:24:42
https://webtrh.cz/diskuse/distinct-nefunguje-pri-inner-join/#reply1364019
Creator13
verified
rating uzivatele
(49 hodnocení)
18. 9. 2018 09:15:04
Napsal phoca;1485510
Možností může být víc:
při připojení k databázi "nastavíte" sql mode, např:
tím ale smažete veškeré nastavení sql modu, což není dobré, proto je lepší vymazat konkrétně jen to jedno pravidlo:
Nebo si vypsat všechny "vlastní" pravidla (příklad v PHP):
Těch možností může být více, na základě verze databáze nastavit zda fungujete ve strict modu nebo ne, atd.
Vdaka. Vsetko teraz funguje tak, ako ma.
18. 9. 2018 09:15:04
https://webtrh.cz/diskuse/distinct-nefunguje-pri-inner-join/#reply1364018
Pro odpověď se přihlašte.
Přihlásit