基于MySQL中列的值的交替行

时间:2012-01-24 12:39:20

标签: mysql sql alternating

我在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,
);

并希望能够从images表中选择行,以便具有project_id IS NOT NULL的交替值。基本上是:

  • 带有project_id的图片
  • 没有project_id的图片
  • 带有project_id的图片
  • 没有project_id的图片
  • 带有project_id的图片
  • 没有project_id的图片

如何在一个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 个答案:

答案 0 :(得分:2)

有趣的挑战。试试这个:

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;