Mam 4 tabelki:
----------- attributes ----------- id name ----------- attribute_values ----------- id value ----------- items ----------- id name itd.. ----------- items_attributes ----------- item_id attribute_id attribute_value_id
Stosując zwykle zapytanie wybieramy wszystkie cechy i ich wartości w formie x rekordów gdzie x to ilości cech (atrybutów).
SELECT i.*, a.name, av.value FROM items i, attribute_values av, attributes a, items_attributes ia WHERE i.id = 666 AND a.id = ia.attribute_id AND av.id = ia.attribute_value_id AND ia.item_id = i.id
Jednak chciałbym uzyskać item wraz ze wszystkimi cechami / wartościami cech w formie jednego rekordu? A jeśli była by możliwość uzyskania nazw kolumn zgodnie z attribute.name to juz był bym w 7 niebie.
Dla jednej cechy można by zrobić to tak:
SELECT i.*, attribute_values.value AS Producent FROM items i, items_attributes ia LEFT JOIN attributes ON ia.attribute_id = attributes.id AND (attributes.id = 1) LEFT JOIN attribute_values ON ia.attribute_value_id = attribute_values.id WHERE i.id = ia.item_id AND ia.item_id = 666 AND (attributes.name) IS NOT NULL
Jednak nie mam pomysłu (poza jednym, używając funkcji która by konstruowała zapytanie na podstawie podanego item.id) jak to rozwiązać dla dowolnej ilości cech?