Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php][mysql] nietypowe zapytanie sql
Forum PHP.pl > Forum > PHP
marrrecki
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?
mefjiu
Z tego co tu widzę to tabela dodatkowe_pola nie jest powiązana z powyższymi danymi.
_olo_1984
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
marrrecki
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.
_olo_1984
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
marrrecki
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
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.