Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Sortowanie bazy według ceny
Forum PHP.pl > Forum > Bazy danych > MySQL
northwest
Witam serdecznie,
Mam taką tabelę:
  1. CREATE TABLE IF NOT EXISTS `produkty` (
  2. `bf_id` bigint(20) UNSIGNED NOT NULL,
  3. `nazwa` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,
  4. `cena_netto` decimal(9,2) DEFAULT '0.00',
  5. `cena_promocyjna` decimal(9,2) DEFAULT '0.00',
  6. ) ENGINE=MyISAM AUTO_INCREMENT=33 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;


W kolumnach cena_netto i cena_promocyjna mam ceny.
Potrzebuję zapytania który posortuje mi produkty na zasadzie sortowania:
a) jeśli produkt nie ma przypisanej cena_promocyjna - to bierzemy pod uwagę cenę tradycyjną,
cool.gif jeśli produkt ma cena_promocyjna - to bierzemy pod uwagę tą cenę....

Da się coś takiego zrobić?

Northwest
kartin
  1. ORDER BY IFNULL(cena_promocyjna, cena_netto)
northwest
dziękuję smile.gif
A gdybym chciał wyświetlić ostatnio dodane 10 produktów i posortować je według nazwy?
Chodzi o sortowanie tylko między tymi ostatnio dodanymi rekordami - a nie całością bazy smile.gif
kartin
Jak nie masz informacji o czasie dodania to nie zrobisz tego.
Chyba, że założy się, że bf_id odzwierciedla kolejność dodawania. Wtedy można to zrobić np. tak:
  1. SELECT p1.bf_id, p1.nazwa, p1.cena_netto, p1.cena_promocyjna
  2. FROM produkty p1
  3. JOIN (SELECT bf_id FROM produkty ORDER BY 1 DESC LIMIT 10) p2 ON (p1.bf_id = p2.bf_id)
  4. ORDER BY p1.nazwa


Można też zrobić bez złączenia tabel. To zapytanie powinno być szybsze szczególnie jak masz dużo produktów.
  1. SELECT bf_id, nazwa, cena_netto, cena_promocyjna
  2. FROM produkty
  3. WHERE bf_id IN (SELECT bf_id FROM (SELECT p.bf_id FROM produkty p ORDER BY 1 LIMIT 10) temp_tab)
  4. ORDER BY nazwa
DarkAbso
Ewentualnie można to załatwić bez złączeń, co pewnie będzie najszybsze:
  1. SELECT bf_id, nazwa, cena_netto, cena_promocyjna
  2. FROM (SELECT bf_id, nazwa, cena_netto, cena_promocyjna FROM produkty ORDER BY bf_id DESC LIMIT 10) AS test
  3. ORDER BY nazwa
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.