Чередование строк на основе значения столбца в MySQL - PullRequest
0 голосов
/ 24 января 2012

У меня проблема с выбором чередующихся строк в MySQL - Изображение:

CREATE TABLE `images` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `title` varchar(255) DEFAULT NULL,
  `file` varchar(255) DEFAULT NULL,
  `project_id` int(10) unsigned DEFAULT NULL,
);

И хочу иметь возможность выбирать строки из таблицы изображений таким образом, чтобы иметь чередующиеся значения project_id IS NOT NULL. В основном:

  • изображение с идентификатором проекта
  • изображение без идентификатора проекта
  • изображение с идентификатором проекта
  • изображение без идентификатора проекта
  • изображение с идентификатором проекта
  • изображение без идентификатора проекта

Как это можно сделать в одном SQL-запросе? Я пробовал:

SELECT `images`.*, 
IF(images.project_id, images.project_id % 2, images.id % 2) AS `mixer`
FROM `images` AS `images`
ORDER BY `mixer` DESC

Но это не то, что мне нужно. Также в последнем запросе, вероятно, будет указан «GROUP BY images.id», поэтому, если решение не испортит запрос, это будет приветствоваться.

1 Ответ

2 голосов
/ 24 января 2012

Интересный вызов. Попробуйте это:

SELECT images.*, 
FROM images, (SELECT @x:=-1, @y:=0) c
ORDER BY CASE WHEN project_id is not null THEN @x:=@x+2 ELSE @y:=@y+2 END;

Это работает, увеличивая одно из двух значений @x и @y на основе условия и имея заказанное вами значение, сначала начните с более низкого начального значения. Результат оценки находится в диапазоне 1, 2, 3, 4, ..., как видно из бега:

SELECT CASE WHEN project_id is not null THEN @x:=@x+2 ELSE @y:=@y+2 END z, images.*, 
FROM images, (SELECT @x:=-1, @y:=0) c
ORDER BY z;
...