Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Sortowanie - wg wartości pól z innej tabeli.
Forum PHP.pl > Forum > Bazy danych > MySQL
yacoos
Witam,
Mam dosyć skomplikowaną sytuację i nie mogę sobie poradzić ze skonstruowaniem zapytania.
Mam produkty i ich atrybuty oraz wartości tych atrybutów chodzi mi o posortowanie produktów względem kilku atrybutów w odpowiedniej kolejności.
Atrybuty rozwiązałem w te sposób, że mam tabelę atrybuty (w której są tylko ich nazwy), tabelę atrybuty_katalog (która łączy id grupy towarowej z id przypisanego do niego atrybutu) oraz tabelę atrybuty_wartosci (w której łączę id produktu, id atrybutu oraz mam w końcu wartość wartość).

Teraz chodzi mi o zapytanie, które wybierze wszystko z tabeli produkty majace id kategorii równe X (i to jest oczywiste) ale problem właśnie w posrtowaniu.. posortowane odpowiednio wg wartości atrybutu o id=7, następnie atrybutu o id=1 itd...

Mam nadzieję, że w miarę jasno udało mi się opisać sytuacje, w razie wątpliwości chętnie je rozwieje.
Proszę o jakieś wskazówki mogące pomóc rozwiązać ten problem.

Pozdrawiam,
yacoos
Sh4dow
jest to proste do zrobienia ale nie do konca proste dla bazy do przeliczenia przy duzych ilosciach rekordow
  1. SELECT *
  2. FROM produkt AS p
  3. JEFT JOIN artybuty AS a1 ON (a1.produkt_id = p.id AND a1.id = 7)
  4. JEFT JOIN artybuty AS a2 ON (a2.produkt_id = p.id AND a2.id = 1)
  5. WHERE p.kategori_id = X
  6. ORDER BY a1.wartosc DESC, a2.wartosc DESC

Sadze ze cos takiego powinno zadziałacwiecej atrybutow to kolejne joiny. Oczywiscie mozna zrobic to bez joinow

  1. SELECT *
  2. FROM produkt AS p, artybuty AS a1, artybuty AS a2
  3. WHERE p.kategori_id = X AND a1.produkt_id = p.id AND a1.id = 7 AND a2.produkt_id = p.id AND a2.id = 1
  4. ORDER BY a1.wartosc DESC, a2.wartosc DESC

ale to zapytanie bedzie zachowywac sie zupelnie inaczej

Potestuj moze bedzie działać. Nazwy tablic musisz sobie sam odpowiednio ponazywac i do selecta takze odpowiednio dobrac kolumny
yacoos
Witam,
Bardzo dziękuję za odpowiedź.
Próbowałem z JOIN'ami, jednak otrzymuję błąd:
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'JEFT JOIN dodatkowe_wartosci AS a2 ON ( a2 . id_produkt = p . id_produkt AND a2 ' at line 1

Udało mi się to zrobić z WHERE... jest jednak ALE..
W momencie kiedy rekordu z wartością atrybutu nie ma w bazie - rekord z produktem nie jest wyświetlany..

Czy gdyby to z JOIN'em działało, to również by się tak działo?
No i ew. co zrobić, żeby działało?

Pozdrawiam,
yacoos
Sh4dow
no to co mowisz to wlasnie roznica miedzy zapytaniem z JOIN i z WHERE, jesliu nie ma atrybutu to w WHERE nie pokaze ci sie produkt. Jesli chodzi o błąd to wklej dokładnie zapytanie to postaramy sie poszukać błędu.
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.