Задать вопрос
@DirDir

Как отсортировать записи в MYSQL по «плавающему» параметру?

Имеется таблица со списком новостей для авто-сайта. Некоторые из новостей ни к чему не привязаны, некоторые относятся к определенной марке, некоторые к определенной категории (тюнинг, новинки, авто-шоу...).
Задача: вытащить одним 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
  • Вопрос задан
  • 200 просмотров
Подписаться 1 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 2
R0dger
@R0dger
Laravel/Yii/2 AngularJs PHP RESTful API
Может Вам подойдет такой механизм?
www.mysql.ru/docs/man/UNION.html
Ответ написан
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
ORDER BY `brand_id` = :brand DESC, `date` DESC
LIMIT 3
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы