我在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的交替值。基本上是:
如何在一个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”,所以如果解决方案不会弄乱那些非常受欢迎的查询。
答案 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;