Kombinacje atrybutów dla danego produktu

0

Witam,
mam następujące tablice:
tProdukty(ID, numer_katalogowy, numer_wewnetrzny, kod_kreskowy, nazwa_produktu_pelna, marza, producent_id, dostawca_id)
tWartosciAtrybutow(ID, produkt_id, atrybut_id, wartosc_atrybutu)
tAtrybuty(ID, nazwa_atrybutu)
tKombinacje(ID, produkt_id, dodatek_do_ceny, dodatek_do_wagi)
tKombinacjePolaczenia(kombinacja_id, wartosc_atrybutu_id)
tCenyZakupu(dostawca_id, kombinacja_id, cena_zakupu)

chciałbym wymyśleć takie zapytanie do bazy, które zwróci mi ID konkretnej kombinacji mając dane:

  • id produktu
  • wartosci atrybutu dla danej kombinacji

Przykład:
Mam produkt: bluza z kapturem
Atrybuty: Rozmiar, Kolor
Wartości atrybutów: L,M,XL, czarny, zielony, zółty
Przykładowa kombinacja dla produktu: czarny, L

I teraz: jak zidentyfikować numer kombinacji? Jak powinno brzmieć zapytanie?

0

1.Nie prefiksuj tabel, póki nie ma wyraźnej potrzeby - u Ciebie nie ma*.
2.Trzymaj się jednakowego nazewnictwa: albo wszędzie: dostawca_id, zakup_cena, atrybut_wartosc albo, jak człowiek, id_dostawcy, id_kombinacji itd.
3.Poczytaj o joinach.

* tabele są prefiksowane np. przez WordPressa, gdy ma być zainstalowane wiele instancji WP na jednej bazie danych (co swoją drogą jest wyjątkowo złe). Nie rób tak nigdy :P

0

Dzięki za podpowiedź - ustosunkuje się.

Nie pasuje mi żaden join do tej sytuacji, ponieważ otrzymuję przypisania wartości atrybutów:

kobinacja_id wartosc
1 L
1 czarny
3 czerwony
3 M
4 XL
2 L
2 czarny

Jak mam pobrać numer kombinacji, gdzie mamy kombinację (L, czarny)?

1

Dostosuj sobie:

SELECT kombinacja_id FROM kombinacje WHERE wartosc IN ('L', 'czarny') GROUP BY kombinacja_id HAVING Count(DISTINCT wartosc)=2

To '2' to tak naprawdę liczebność zbioru z IN

0

No i pięknie. Strzał w dziesiątkę. Dzięki wielkie! :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1