0

我在 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 的交替值不为空。基本上:

  • 带有 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”,所以如果解决方案没有弄乱查询,那将是非常受欢迎的。

4

1 回答 1

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;
于 2012-01-24T13:14:11.200 回答