Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Sortowanie - wg wartości pól z innej tabeli.
yacoos
post
Post #1





Grupa: Zarejestrowani
Postów: 27
Pomógł: 0
Dołączył: 19.02.2005

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


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
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 3)
Sh4dow
post
Post #2





Grupa: Zarejestrowani
Postów: 569
Pomógł: 0
Dołączył: 17.08.2003
Skąd: Dąbrowa Górnicza

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


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

Ten post edytował Sh4dow 4.12.2006, 10:49:44


--------------------
Warsztat: Linux: PHP, MySQL, Apache, NetBeans, C++, Qt-Creator
Użytkownik, słowo którego specjaliści IT używają, gdy chcą powiedzieć idiota
Zarządzaj swoim budżetem domowym
Go to the top of the page
+Quote Post
yacoos
post
Post #3





Grupa: Zarejestrowani
Postów: 27
Pomógł: 0
Dołączył: 19.02.2005

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


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
Go to the top of the page
+Quote Post
Sh4dow
post
Post #4





Grupa: Zarejestrowani
Postów: 569
Pomógł: 0
Dołączył: 17.08.2003
Skąd: Dąbrowa Górnicza

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


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.


--------------------
Warsztat: Linux: PHP, MySQL, Apache, NetBeans, C++, Qt-Creator
Użytkownik, słowo którego specjaliści IT używają, gdy chcą powiedzieć idiota
Zarządzaj swoim budżetem domowym
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 22.08.2025 - 02:15