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 IS NOT NULL の交互の値を持つような方法で images テーブルから行を選択できるようにしたいと考えています。基本的:

  • project_id の画像
  • project_id のない画像
  • project_id の画像
  • project_id のない画像
  • project_id の画像
  • project_id のない画像

これを 1 つの 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;

これは、2 つの値のいずれかをインクリメントし、条件@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 に答える