Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Składanie rekordu z kilku tabel
Forum PHP.pl > Forum > Bazy danych > PostgreSQL
easy
Witam,

Mam 4 tabelki:
  1. -----------
  2. attributes
  3. -----------
  4. id
  5. name
  6. -----------
  7. attribute_values
  8. -----------
  9. id
  10. value
  11. -----------
  12. items
  13. -----------
  14. id
  15. name
  16. itd..
  17. -----------
  18. items_attributes
  19. -----------
  20. item_id
  21. attribute_id
  22. 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).
  1. SELECT i.*, a.name, av.value FROM items i,
  2. attribute_values av,
  3. attributes a,
  4. items_attributes ia
  5. 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:
  1. SELECT i.*, attribute_values.value AS Producent
  2. FROM items i,
  3. items_attributes ia
  4. LEFT JOIN attributes
  5. ON ia.attribute_id = attributes.id AND (attributes.id = 1)
  6. LEFT JOIN attribute_values
  7. ON ia.attribute_value_id = attribute_values.id
  8. 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?
SongoQ
No to chyba zostaje zwrocenie wszystkich kombinacji bo nie ma takiej mozliwosci aby rekordy dolanczal do 1 rekordu.
easy
Nie wierze, że się nie da tego zrobić, ale widać muszę spróbować rozwiązania z funkcją.
SongoQ
No chyba ze jakos przez CONCAT ale mysle ze w Twoim przypadku to odpada bo to sluzy do laczenia stringow.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.