MySQL - Výber produktu ktorý je vo viacerých kategóriách

Programovacie jazyky, rady, poradňa...
__construct
Medium Expert
Medium Expert
Používateľov profilový obrázok
Príspevky: 108
Registrovaný: 23 sep 2009, 9:32
Bydlisko: Dark Side of The Moon
Kontaktovať používateľa:

MySQL - Výber produktu ktorý je vo viacerých kategóriách

Príspevok od používateľa __construct »

Mám tabulku kde sú priradené jednotlivým produktom kategórie (jeden produkt môže byť vo viacerých kategóriách)
Potrebujem poradiť ako zostaviť dotaz (poprípade ako to vyriešiť cez PHP) tak aby mi vyselectovalo produkt ktorý je v napr. 2 určitých kategóriách súčasne.

Kód: Vybrať všetko

id_kategoria | id_produkt
1            |   1
2            |   1
1            |   2
2            |   2
3            |   2
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Re: MySQL - Výber produktu ktorý je vo viacerých kategóriách

Príspevok od používateľa audiotrack »

select id_produkt, count(id_kategoria) as x from tabulka group by id_produkt having x=2
__construct
Medium Expert
Medium Expert
Používateľov profilový obrázok
Príspevky: 108
Registrovaný: 23 sep 2009, 9:32
Bydlisko: Dark Side of The Moon
Kontaktovať používateľa:

Re: MySQL - Výber produktu ktorý je vo viacerých kategóriách

Príspevok od používateľa __construct »

To by vec riešilo keby mi záležalo iba na tom aby to bolo v dvoch kategóriách. Ale ja potrebujem aby to hľadalo produkty, ktoré sú napr. v kategórii 1 a 3 zároveň - potom prepíšem idčka a vyhľadám produkty ktoré sú napr. v 2 a 4 atď ..

Dúfam, že som sa dobre vyjadril ..
dEVIANT
Light Expert
Light Expert
Používateľov profilový obrázok
Príspevky: 47
Registrovaný: 02 apr 2009, 20:18

Re: MySQL - Výber produktu ktorý je vo viacerých kategóriách

Príspevok od používateľa dEVIANT »

Veď premennú by si predal ako parameter, a keby si chcel z dvoch kategórii tak môžeš spraviť prienik selectov pomocou INTERSECT
__construct
Medium Expert
Medium Expert
Používateľov profilový obrázok
Príspevky: 108
Registrovaný: 23 sep 2009, 9:32
Bydlisko: Dark Side of The Moon
Kontaktovať používateľa:

Re: MySQL - Výber produktu ktorý je vo viacerých kategóriách

Príspevok od používateľa __construct »

dEVIANT napísal:Veď premennú by si predal ako parameter, a keby si chcel z dvoch kategórii tak môžeš spraviť prienik selectov pomocou INTERSECT
INTERSECT nepoznám ani som k nemu na MySQL nenašiel manuál .. ako sa to používa .. ?
dEVIANT
Light Expert
Light Expert
Používateľov profilový obrázok
Príspevky: 47
Registrovaný: 02 apr 2009, 20:18

Re: MySQL - Výber produktu ktorý je vo viacerých kategóriách

Príspevok od používateľa dEVIANT »

Vlastne ako pozerám tak mysql nepodporuje intersect...tak to skús, že:

select id_produktu from tabulka where id_kategoria = 1 AND id_kategoria = 2
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Re: MySQL - Výber produktu ktorý je vo viacerých kategóriách

Príspevok od používateľa audiotrack »

bude mu to fungovať aj na jednej tabuľke? Nebude musieť používať dočasné tabuľky?
dEVIANT
Light Expert
Light Expert
Používateľov profilový obrázok
Príspevky: 47
Registrovaný: 02 apr 2009, 20:18

Re: MySQL - Výber produktu ktorý je vo viacerých kategóriách

Príspevok od používateľa dEVIANT »

Ono ta tvoja tabuľka čo si ju tu hodil je vlastne výsledok mapovania vzťahu m:n nie?ako pomocná tabuľka s FK oboch tabuliek...

Tu by to ten intersect hňed vyriešil...no len ty si asi ako povedal audiotrack budeš musieť spraviť dočasnú tabuľku pre jedno id a potom z neho vyselectovať len tých s druhým.
__construct
Medium Expert
Medium Expert
Používateľov profilový obrázok
Príspevky: 108
Registrovaný: 23 sep 2009, 9:32
Bydlisko: Dark Side of The Moon
Kontaktovať používateľa:

Re: MySQL - Výber produktu ktorý je vo viacerých kategóriách

Príspevok od používateľa __construct »

dEVIANT napísal:Ono ta tvoja tabuľka čo si ju tu hodil je vlastne výsledok mapovania vzťahu m:n nie?ako pomocná tabuľka s FK oboch tabuliek...
Presne tak ..

Našiel som niečo, ale pripadá mi to ako "hurá-riešenie" .. čo myslíte?

Kód: Vybrať všetko

SELECT tabulka1.id_produkt
FROM kategoria AS tabulka1
LEFT JOIN kategoria AS tabulka2
ON tabulka1.id_produkt = tabulka2.id_produkt
WHERE tabulka1.id_kategoria = 1 AND tabulka2.id_kategoria = 2;
Napísať odpoveď