Zapytanie grupujące obiekty

0

Witam serdecznie,
Mam taką tabelkę w MySQL:

CREATE TABLE `obiekty` (
  `id` bigint(20) UNSIGNED NOT NULL,
  `nazwa` varchar(85) COLLATE utf8_unicode_ci DEFAULT NULL,
  `ulica` varchar(75) COLLATE utf8_unicode_ci DEFAULT NULL,
  `miasto` varchar(150) COLLATE utf8_unicode_ci DEFAULT NULL,
  `kod_pocztowy` varchar(25) COLLATE utf8_unicode_ci DEFAULT NULL,
  `email` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,
  `www` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,
  `platnosc_data` date NOT NULL,
  `platnosc_data_wyroznione` date NOT NULL,
  `platnosc_data_wyroznione2` date NOT NULL,
  `platnosc_data_strona_glowna` date NOT NULL,
  `platnosc_data_strona_glowna_premium` date NOT NULL,
  `platnosc_kwota` decimal(9,2) NOT NULL,
  `podbicia` int(11) NOT NULL DEFAULT '0'
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

Mam listę obiektów składających się dotychczas z 4 zapytać:

  1. obiekty najwyższe na liście (ramka + wyróżnienie)
SELECT *  FROM cms_admin_firma  WHERE platnosc_data_wyroznione2 >= '2017-04-18'  and platnosc_data >= '2017-04-18'  and platnosc_data_wyroznione >= '2017-04-18' " ORDER by podbicia DESC
  1. obiekt z samym wyróżnieniem
SELECT *  FROM cms_admin_firma  WHERE  platnosc_data >= '2017-04-18'  and platnosc_data_wyroznione2 < '2017-04-18'  and platnosc_data_wyroznione >= '2017-04-18'  ORDER by podbicia DESC
  1. obiekty z samą ramką
SELECT *  FROM cms_admin_firma  WHERE   platnosc_data >= '2017-04-18'  and platnosc_data_wyroznione <= '2017-04-18' and platnosc_data_wyroznione2 >= '2017-04-18' ORDER by podbicia DESC
  1. tradycyjne obiekty
SELECT *  FROM cms_admin_firma  WHERE   platnosc_data >= '2017-04-18'  and platnosc_data_wyroznione <= '2017-04-18'  ORDER by podbicia DESC

Czy da się wyświetlić te obiekty za pomocą 1 zapytania, zachowując powyższe sortowanie (kolejność obiektów na liście)?

2

Można pobrać je unionem:

Ale ciężko coś doradzić ponieważ nie za bardzo widzę jasny podział obiektów, ponieważ wg warunków

  1. 4 zawiera częśc z 3
  2. 1 i 3 też mają wspólną część
1

może klauzula UNION albo UNION ALL która skleja w jedną tabelę wyniki tych czterech podzapytań

select anything from anyTable  where Condition1 order by firstOrder
 union  
select anything from anyTable  where Condition2 order by secondOrder
 union 
select anything from anyTable  where Condition3 order by thirdOrder
 union 
select anything from anyTable  where Condition4  order by fourthOrder

0
SELECT 
  case 
    when f.platnosc_data_wyroznione >= '2017-04-18' AND f.platnosc_data_wyroznione2 >= '2017-04-18' then 1	
    when f.platnosc_data_wyroznione >= '2017-04-18' AND f.platnosc_data_wyroznione2 < '2017-04-18' then 2
	when f.platnosc_data_wyroznione <= '2017-04-18' AND f.platnosc_data_wyroznione2 >= '2017-04-18' then 3
	when f.platnosc_data_wyroznione <= '2017-04-18' then 4
	else 5 end kolejnosc,
  f.* 
FROM cms_admin_firma f WHERE f.platnosc_data >= '2017-04-18'
order by 1 asc, podbicia desc

powinno zadziałać

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