Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Łączenie 2 zapytań MySQL w jedno i grupowanie wyników
Forum PHP.pl > Forum > Bazy danych
northwest
Witam serdecznie,
Mam taką tabelę:

  1.  
  2.  
  3. CREATE TABLE IF NOT EXISTS `cms_pojazd` (
  4. `bf_id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT,
  5. `nazwa` varchar(85) COLLATE utf8_unicode_ci DEFAULT NULL,
  6. `cena` varchar(85) COLLATE utf8_unicode_ci DEFAULT NULL,
  7. `promowanedata` date DEFAULT NULL,
  8. UNIQUE KEY `id` (`bf_id`)
  9. ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;
  10.  


Chciałbym za pomocą 1 zapytania wyświetlić najpierw produkty promowane (czyli te które mają w kolumnie promowanedata "ważną datę") - a następnie pozostałe rekordy (te których promocja minęła lub nigdy nie były promowane).
Produkty promowane wiem że mogę wyświetlić poprzez: SELECT * FROM cms_pojazd WHERE DATE(promowanedata) >= DATE(NOW()) - ale czy da się połączyć to w 1 zapytanie ze zwykłymi (SELECT * FROM cms_pojazd)?

Bardzo proszę o pomoc,
Northwest

Próbowałem takie coś: SELECT * FROM cms_pojazd where $selkateg enable ='1' $typo ORDER by promowanedata DESC, nazwa ASC
ale nie poprawnie sortuje sad.gif
SpiritCode
Może spróbuj UNION?
northwest
z tym UNION'em nie bardzo chce to działać jak powinno sad.gif
może opiszę jeszcze raz co chciałbym uzyskać:
a) wyświetlenie alfabetycznie na pierwszych pozycjach promowane ogłoszenia (im dłużej ważne - tym wyżej)
cool.gif wyświetlenie pozostałych ogłoszeń pod tymi promowanymi - alfabetycznie

Czyli:
- Ogłoszenie premium ważne do grudnia
- Ogłoszenie premium ważne do listopada
- Ogłoszenie premium ważne do marca
- "A" - ogłoszenie - nigdy nie premium
- "B" - ogłoszenie - nigdy nie premium
- "C" - ogłoszenie - "kiedyś" premium
- "D" - ogłoszenie nigdy nie premium
itp
thek
Ale z drugiego zapytania musisz wyrzucić te, które Ci się już w pierwszym znalazły. I dopiero wtedy UNION między nimi. Inaczej duplikaty Ci się porobią.
northwest
No właśnie na tym utknąłem.... da się to zrobić 1 zapytaniem?
Czy mógłbym prosić o takie zapytanie?
Pyton_000
Zrób to normalnie UNION czyli 1 zapytanie które wybiera Ci Premium i drugie Nie premium
northwest
no tak, ale to 2 zapytania... czyli nie da się tego zrobić w 1 zapytaniu?
Pyton_000
Przecież to będzie 1 zapytanie :| złożone z 2 podzapytań.
redeemer
Możesz zrobić "sztuczną kolumnę z wykorzystaniem instrukcji warunkowej IF, tzn. odejmujesz czas zakonczenia promocji od czasu aktualnego i jeśli > 0 to zostawiasz różnice, jak < 0 to wstawiasz 0. Sortujesz potem po dwóch kolumnach - po "sztucznej" i nazwie.
nospor
... order by if(promowanedata >=now(),promowanedata, \'1980-09-09\') desc
Prosze, jedno zapytanie smile.gif
northwest
Dziękuję bardzo. Jest prawie dobrze wink.gif sortuje po datach promowanych (od najdłużej ważnych do tych których ważność minęła) -a później nie premium.

Problem jest w tym że:
a) nie sortuje ogłoszeń "nie premium" - alfabetycznie
cool.gif ogłoszenia których termin "minął" = nie są już traktowane jako premium

Mam takie zapytanie: SELECT * FROM cms_pojazd where enable ='1' order by if(promowanedata >=now(),promowanedata, '2015-01-19') desc

Jeszcze raz dziękuje za pomoc smile.gif
nospor
Cytat
ogłoszenia których termin "minął" = nie są już traktowane jako premium
Jak napisales na poczatku tak dostales smile.gif Nie moja wina, ze teraz zmieniles specyfikacje na poczekaniu tongue.gif
northwest
Przepraszam, głupio to napisałem.... Później to dopisałem, ale chyba nie jasno sad.gif

Jeśli mógłbyś mi pomóc z tym co napisałem w poprzednim poście, to byłbym bardzo wdzięczny
nospor
order by if(promowanedata >=now(),promowanedata, \'1980-09-09\') desc, pole_do_sortowania_alfabetycznego

A jesli interesuje cie jakakolwiek promowanadata to:

order by if(promowanedata is not null ,promowanedata, \'1980-09-09\') desc, pole_do_sortowania_alfabetycznego
bo zakladam, ze gdy nie byla promowana to miala wartosc NULL
northwest
dziekuje smile.gif
nospor
Choc nie rozumiem, czemu nie dzialalo ci poprostu to:
order by promowanedata desc, pole_do_sortowania_alfabetycznego
to powinno samo z siebie robić to co chcesz bez żadnego kombinowania
northwest
Promowane ogłoszenia "wygasłe" sortował źle;)
nospor
Zrozumialem, z ktoregos kolejnego posta, ze wygasle tak czy siak mialy byc wyzej nad w ogole nigdy nie promowanymi. Jesli nie, to faktycznie nie mialo to prawo dobrze działać smile.gif
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.