Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [php][mysql] nietypowe zapytanie sql
marrrecki
post 16.03.2009, 17:42:35
Post #1





Grupa: Zarejestrowani
Postów: 110
Pomógł: 0
Dołączył: 19.07.2006
Skąd: Lublin

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


Potrzebuję wykonać zapytanie sql w którym wykonuję sortowanie według wartości pola, ale dosyć nietypowo. Mam następujące tabele:

produkty:
- producent_id
- produkt_id

opisy_produktów:
- produkt_id
- produkt_nazwa
- język_id

produkty_w_kategoriach:
- produkt_id
- kategoria_id

dodatkowe_pola:
- id_pola
- nazwa_pola

produkty_do_pol_dodatkowych
- produkt_id
- id_pola
- value

I teraz muszę wyciągnąć dane z tabel produkty i opisy produktów mając podane id kategorii (tabela produkty_w_kategoriach) i posortować to według wybranego pola z tabeli dodatkowe_pola.

Czy ktoś ma pomysł na wykonanie takiego zapytania?
Go to the top of the page
+Quote Post
mefjiu
post 16.03.2009, 22:53:59
Post #2





Grupa: Zarejestrowani
Postów: 313
Pomógł: 5
Dołączył: 22.03.2005

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


Z tego co tu widzę to tabela dodatkowe_pola nie jest powiązana z powyższymi danymi.

Ten post edytował mefjiu 16.03.2009, 22:54:32
Go to the top of the page
+Quote Post
_olo_1984
post 17.03.2009, 07:34:53
Post #3





Grupa: Zarejestrowani
Postów: 289
Pomógł: 77
Dołączył: 5.08.2006

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


ja mam taki pomysł (z palca)
  1. SELECT p.*, o.produkt_nazwa, o.jezyk_id, pd.id_pola, dp.nazwa_pola
  2. FROM produkty_w_kategoriach AS p
  3. LEFT JOIN opisy_produktow AS o ON (o.produkt_id = p.produkt_id)
  4. LEFT JOIN produkty_do_pol_dodatkowych AS pd ON (pd.produkt_id = p.produkt_id)
  5. LEFT JOIN dodatkowe_pola AS dp ON (dp.id_pola = pd.id_pola)
  6. ORDER BY dp.nazwa_pola

na moje oko coś takiego by było, można też pokombinować z podzapytaniami, może to Ci pomoże

pozdr


--------------------
awake
Go to the top of the page
+Quote Post
marrrecki
post 17.03.2009, 10:29:26
Post #4





Grupa: Zarejestrowani
Postów: 110
Pomógł: 0
Dołączył: 19.07.2006
Skąd: Lublin

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


Cytat(mefjiu @ 16.03.2009, 22:53:59 ) *
Z tego co tu widzę to tabela dodatkowe_pola nie jest powiązana z powyższymi danymi.

Jest powiązana poprzez tabelę produkty_do_pol_dodatkowych

_olo_1984 spróbuję i dam znać jaki efekt.

No niestety, to robi sortowanie według nazwy pola, a nie wartości nazwy pola.
Znalazłęm cos takiego jak
  1. ...ORDER BY FIELD(pole_id, 14)
ale też coś nie bardzo chce sortować wykorzystując ten sposób.

Ten post edytował marrrecki 17.03.2009, 13:09:59
Go to the top of the page
+Quote Post
_olo_1984
post 17.03.2009, 13:50:19
Post #5





Grupa: Zarejestrowani
Postów: 289
Pomógł: 77
Dołączył: 5.08.2006

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


Cytat(marrrecki @ 17.03.2009, 10:29:26 ) *
No niestety, to robi sortowanie według nazwy pola, a nie wartości nazwy pola.


nie bardzo rozumiem co masz na myśli. Może ASC, DESC, może GROUP BY ? kombinowałeś w ten sposób ?

edit:
chyba że Tobie chodzi żeby sortowało według dp.id_pola (z mojego przykładu) ? Jeżeli tak to spóbuj
  1. SELECT p.*, o.produkt_nazwa, o.jezyk_id, pd.id_pola, dp.id_pola
  2. FROM produkty_w_kategoriach AS p
  3. LEFT JOIN opisy_produktow AS o ON (o.produkt_id = p.produkt_id)
  4. LEFT JOIN produkty_do_pol_dodatkowych AS pd ON (pd.produkt_id = p.produkt_id)
  5. LEFT JOIN dodatkowe_pola AS dp ON (dp.id_pola = pd.id_pola)
  6. ORDER BY dp.id_pola


Ten post edytował _olo_1984 17.03.2009, 13:53:02


--------------------
awake
Go to the top of the page
+Quote Post
marrrecki
post 17.03.2009, 14:19:26
Post #6





Grupa: Zarejestrowani
Postów: 110
Pomógł: 0
Dołączył: 19.07.2006
Skąd: Lublin

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


Nie według id_pola tylko według wartości tego pola zaczynając lub kończąc na największej lub najmniejszej wartości tego pola (asc, desc).

Dokłądne zapytanie jakie mam teraz to:
  1. SELECT pd.products_name, pd.products_description, p.products_image, p.products_id, p.products_available, p.manufacturers_id, p.products_price, p.products_tax_class_id, IF(s.STATUS, s.specials_new_products_price, NULL) AS specials_new_products_price, IF(s.STATUS, s.specials_new_products_price, p.products_price) AS final_price, p2c.categories_id FROM products p LEFT JOIN products_to_products_extra_fields p2pef ON p.products_id = p2pef.products_id LEFT JOIN specials s ON p.products_id = s.products_id, products_description pd, manufacturers m, products_to_categories p2c WHERE p.products_id = p2c.products_id AND p.products_status = '1' AND pd.products_id = p.products_id AND pd.language_id = '1' AND p.manufacturers_id = m.manufacturers_id AND m.manufacturers_id = '13' ORDER BY FIELD(p2pef.products_extra_fields_id, '1') DESC, pd.products_name


Ten post edytował marrrecki 17.03.2009, 14:20:16
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 Wersja Lo-Fi Aktualny czas: 14.08.2025 - 10:50