Zadejte hledaný výraz...

Jak se zeptat na produkt s více možnými parametry, když parametry jsou v jedné tabulce?

Zdravím,
potřeboval bych od někoho zkušenějšího pomoci s mysql dotazem.
Mám 3 tabulky
products
parameter_values
products_parameters
O co mi jde, v tabulce products_parameters jsou vazby mezi produkty a parametry. product_id -> value (value obsahuje id parametru z tabulky parameter_values). Jeden produkt má více parametrů, tedy více řádků v tabulce products_parameters se stejným product_id. Pokud chci vybrat všechny produkty, které mají určitý parametr, třeba 1Ghz processor(id 22), je to jednoduché.
mysql_query("SELECT product_id FROM products_parameters WHERE value = 22");
Jakým způsobem však vyberu produkty, které mají 2 či více parametrů? Pro příklad, produkty které mají value = 11(fotoaparát) i 22(1Ghz processor) i 25(2 jádra)?
Díky za nápady
10. 2. 2014 15:05:38
https://webtrh.cz/diskuse/jak-se-zeptat-na-produkt-s-vice-moznymi-parametry-kdyz-parametry-jsou-v-jedne-tabulce#reply994930
P-ierre
verified
rating uzivatele
(43 hodnocení)
10. 2. 2014 15:14:29
Jestli správně chápu, tak data v tabulce jsou takovéhle:
product_id|value
50|22
50|25
V tom případě bez toho GROUP BY by se vrátily 2 záznamy, oba s product_id 50. S GROUP BY se vrátí jen 1 záznam s product_id 50.
10. 2. 2014 15:14:29
https://webtrh.cz/diskuse/jak-se-zeptat-na-produkt-s-vice-moznymi-parametry-kdyz-parametry-jsou-v-jedne-tabulce#reply994929
Trošku jsme se nepochopili, Já bych právě potřeboval, aby se mi vrátili jen id produktů, které mají jak foťák, tak 1Ghz processor a ještě k tomu, je tento 1Ghz processor dvoujádrový. Tedy ne všechny produkty co mají buď foťák, nebo 1Ghz processor, nebo jakýkoliv dvoujádrový processor, což mi tento dotaz vrací.
Jediné co mě napadá je řešení pomocí PHP, ale to by asi byla pěkná prasečina. Nejraději bych to vyřešil pomocí jednoho mysql dotazu, jestli je to vůbec možné.
10. 2. 2014 15:36:30
https://webtrh.cz/diskuse/jak-se-zeptat-na-produkt-s-vice-moznymi-parametry-kdyz-parametry-jsou-v-jedne-tabulce#reply994928
Jan Stejskal
verified
rating uzivatele
(7 hodnocení)
10. 2. 2014 15:43:52
Stačí místo OR dát AND.
10. 2. 2014 15:43:52
https://webtrh.cz/diskuse/jak-se-zeptat-na-produkt-s-vice-moznymi-parametry-kdyz-parametry-jsou-v-jedne-tabulce#reply994927
Pokud použiji AND, tak mi mysql vrátí pokaždé nulový počet řádků, ikdyž nějaké produkty, které mají tyto 3 parametry tam prokazatelně jsou.
AND mi funguje pouze v případně, že hledám 2 stejné hodnoty na stejném řádku.
Například product_id = 50 AND value = 22
V mém případě by se však jednalo o 2 řádky, které obsahují stejné product_id a zároveň jeden z nich value 50 a druhý value 22. Protože chci vypsat produkty, které mají oba tyto parametry.
10. 2. 2014 15:47:40
https://webtrh.cz/diskuse/jak-se-zeptat-na-produkt-s-vice-moznymi-parametry-kdyz-parametry-jsou-v-jedne-tabulce#reply994926
Martin
verified
rating uzivatele
(62 hodnocení)
10. 2. 2014 16:30:17
Zkus tohle
Musíš jen znát počet hodnot, které hledáš a ten doplníš na poslední řádek.
10. 2. 2014 16:30:17
https://webtrh.cz/diskuse/jak-se-zeptat-na-produkt-s-vice-moznymi-parametry-kdyz-parametry-jsou-v-jedne-tabulce#reply994925
Martin Kejzlar: Vypadá že to funguje.
Díky
---------- Příspěvek doplněn 10.02.2014 v 19:04 ----------
Ještě bych mojí otázku trošku rozvinul.
Narazil jsem na další problém.
Jak do tohoto dotazu zakomponovat možnost, když máme 2 či více stejných parametrů, které si navzájem odporují?
Příklad:
Ve filtru si zaškrtnu že chci vypsat produkty, co mají fotoaparát (id: 21) a 1Ghz processor (id: 25). Na to mi krásně poslouží dotaz výše.
Problém však nastává, pokud chci například vypsat i produkty které mají buď 1Ghz processor (id: 25), nebo 2Ghz processor (id: 26) a zároveň mají fotoaparát (id: 21) a zároveň 65 tisíc barev (id: 30) nebo 262 tisíc barev (id: 31) a zároveň mají 12 Mpx fotoaparát (id: 120).
Věděl by si někdo rady?
10. 2. 2014 16:39:50
https://webtrh.cz/diskuse/jak-se-zeptat-na-produkt-s-vice-moznymi-parametry-kdyz-parametry-jsou-v-jedne-tabulce#reply994924
Pokud jsem správně pochopil vaši otázku a nejasné názvy sloupců, potřebujete spojit vícekrát tabulku s parametry pomocí INNER JOIN.
Za každé AND použijete jednou INNER JOIN
IN() ve větvi ON spojí podmínky pomocí OR
Tento dotaz vypadá takto:
10. 2. 2014 21:06:55
https://webtrh.cz/diskuse/jak-se-zeptat-na-produkt-s-vice-moznymi-parametry-kdyz-parametry-jsou-v-jedne-tabulce#reply994923
Pro odpověď se přihlašte.
Přihlásit