Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: ORDER BY
Forum PHP.pl > Forum > Bazy danych > MySQL
Sabudda
Witam,
Mam następującą tabele

Informacje
- id (auto)
- tresc
- data_dodania
- wyroznienie (0/1)

Muszę (w php) wywołać informacje, tak aby:
Rekordy wyświetlały się w kolejności malejącej (desc [czyli najnowsze informacje są z przodu])
Rekordy wyróżnione (wyroznienie = 1) były na początku, jednak tylko wtedy, gdy data dodania = data dzisiejsza, w przeciwnym wypadku niech rekordy wyroznione wyswietlają się z pozostałymi. (czyli jeśli tego samego dnia zostanie dodana inna informacja bez wyroznienia to będzie pod wyróżnionymi)

.

nikt nie potrafi rozwiązać tego problemu ? To może inaczej... jak Wy byście to zrobili...

Najprościej chyba rozbić na 2 zapytania, jednak wtedy trzeba będzie powtórzyć 2 krotnie kod wyświetlający daną informacje... jakieś pomysły ?
prond
Ja bym to zrobił mniej więcej tak :

  1. SELECT
  2. *
  3. FROM ( SELECT
  4. CASE WHEN data_dodania = NOW() AND wyroznienie = 1 THEN 1 ELSE 0 END AS first_sort_col,
  5. infos.*
  6. FROM infos ) AS t1
  7. ORDER BY t1.first_sort_col DESC, t1.data_dodania DESC;


Wybaczcie, że uprościłem warunek na datę.
nospor
  1. (SELECT * FROM tabela WHERE data_dodania = NOW() ORDER BY wyroznienie DESC)
  2. UNION
  3. (SELECT * FROM tabela WHERE data_dodania <> NOW() ORDER BY data_dodania DESC);
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.