Łączenie 2 zapytań MySQL w jedno i grupowanie wyników

0

Witam serdecznie,
Mam taką tabelę:

CREATE TABLE IF NOT EXISTS `cms_pojazd` (
  `bf_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `nazwa` varchar(85) COLLATE utf8_unicode_ci DEFAULT NULL,
  `cena` varchar(85) COLLATE utf8_unicode_ci DEFAULT NULL,
  `promowanedata` date DEFAULT NULL,
  UNIQUE KEY `id` (`bf_id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ; 

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

0

Próbowałem takie coś: SELECT * FROM cms_pojazd where $selkateg enable ='1' $typo ORDER by promowanedata DESC, nazwa ASC
ale nie poprawnie sortuje :(

0

order by promowanedata?
Szukałbym czegoś w tym stylu.

0

Próbowałem SELECT * FROM cms_pojazd where enable ='1' ORDER by promowanedata DESC, nazwa ASC - ale nie działa :(

0
SELECT
  *

FROM
  cms_pojazd

WHERE
  enable='1'

ORDER BY
  CASE promowanedata IS null
    WHEN true THEN 1
    WHEN false THEN 0
  END ASC

Więc może coś w tym stylu :P

0

nie bardzo to działa :(
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)
b) wyświetlenie pozostałych ogłoszeń pod tymi promowanymi - alfabetycznie

0

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
0

witam

odpowiedź z CASE powinna działać dobrze po modyfikacji ,nieco inne podejście poniżej :

SELECT
  *, if(DATE(promowanedata) >= DATE(NOW()) ,1,0) as rank
 
FROM
  cms_pojazd
 
WHERE
  enable='1'

ORDER BY rank desc ,nazwa asc

pzdr

1 użytkowników online, w tym zalogowanych: 0, gości: 1