Имеется таблица со списком новостей для авто-сайта. Некоторые из новостей ни к чему не привязаны, некоторые относятся к определенной марке, некоторые к определенной категории (тюнинг, новинки, авто-шоу...).
Задача: вытащить одним MySQL запросом 3 последних новости - тут все просто, но:
Если мы находимся на странице определенного бренда - вверху должны быть новости об этом бренде, а если их менее трех (не для всех брендов есть свои новости), то под ними общие новости. Также и с категорией. На всех общих страницах новости выводятся с обратной сортировкой по дате добавления.
Структура базы:
CREATE TABLE IF NOT EXISTS `news_test` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL,
`brand_id` int(11) NOT NULL,
`cat_id` int(11) NOT NULL,
`date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE KEY `person` (`name`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=5 ;
Дамп:
INSERT INTO `news_test` (`id`, `name`, `brand_id`, `cat_id`, `date`) VALUES
(1, 'Представлен новый Volvo XC90', 5, 2, '2015-11-01 00:00:00'),
(2, 'Тюнинг подвески', 0, 4, '2015-11-03 00:00:00'),
(3, 'Просто новость', 0, 0, '2015-11-06 00:00:00'),
(4, 'KIA Sorento получил 5 звезд EuroNCAP', 12, 0, '2015-11-11 00:00:00');
Для подстановки id текущего раздела сайта можно использовать переменные
@brand и @cat