Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Skrócenie zapytania SQL, czyli "dynamiczna" obsługa podzapytań
Tomplus
post
Post #1





Grupa: Zarejestrowani
Postów: 1 884
Pomógł: 231
Dołączył: 20.03.2005
Skąd: Będzin

Ostrzeżenie: (0%)
-----


Mam zapytanie następujące:
  1. SELECT
  2. t.`symbol_id`, t.`price`, t.`stock`,
  3. a.`wartosc` masa, b.`wartosc` kolor, c.`wartosc` material
  4. FROM `towary` t
  5. LEFT JOIN `atrybuty` a ON a.`towar_id` = t.`id` AND a.`atrybut_id` = 1
  6. LEFT JOIN `atrybuty` b ON b.`towar_id` = t.`id` AND b.`atrybut_id` = 2
  7. LEFT JOIN `atrybuty` c ON c.`towar_id` = t.`id` AND c.`atrybut_id` = 3
  8. WHERE t.`product_id` = ?
  9. ORDER BY t.`symbol_id` ASC


Zapytanie jest poprawne, znaczy wyświetla to co oczekuje, tak jak oczekuję. Na tą chwilę.
Jednak nie podoba mi się forma przedstawienia dołączeń do atrybutów, czyli wiele LEFT JOINów do tej samej tabeli.

Chciałbym się dowiedzieć czy jest jakieś inne rozwiązanie, które skróciloby takie zapytanie, bo jeżeli w przyszłości dotarłyby kolejne atrybuty, to należałoby rozszerzyć zapytanie o kolejnego LEFTa, a chciałbym tego uniknąć.

Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
trueblue
post
Post #2





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


Ok, rozumiem. Coś w rodzaju tabeli przestawnej.

Nie ma tu warunku na product_id, a grupowanie jest po id towaru.
  1. SELECT id,symbol_id,price,stock,max(masa),max(kolor),max(material) FROM(
  2. SELECT
  3. t.id,t.symbol_id, t.price, t.stock,
  4. IF(a.atrybut_id=1,a.wartosc,'') AS masa,
  5. IF(a.atrybut_id=2,a.wartosc,'') AS kolor,
  6. IF(a.atrybut_id=3,a.wartosc,'') AS material
  7. FROM towary AS t
  8. LEFT JOIN atrybuty a ON a.towar_id = t.id
  9. ORDER BY t.symbol_id ASC) AS tmp
  10. GROUP BY id


Ja otrzymuję taki wyniki, czyli chyba oczekiwany.
Cytat
id;symbol_id;price;stock;max(masa);max(kolor);max(material)
1;1;100;1;czerwony;1 kg;2 m
2;2;200;2;biały;;3 m


Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 4.10.2025 - 18:57