WHERE条件中的CASE / WHEN取决于行索引

时间:2015-10-12 07:20:15

标签: mysql

为了简单起见,我有一个包含列的表:

id | title | image | video

其中图像和视频是:name-of-image.jpg / name-of-video.mp4或NULL。如何选择仅包含图像的前3行,然后选择包含视频的1行,依此类推:

1 image

2 image

3 image

4 video

5 image

6 image

7 image

8 video

我使用PHP / MySQL。我需要最多1000行然后只回显行,我的查询是:

SET @rownum:=0;
SELECT title, image, video, date_published, @rownum:=@rownum+1 AS rownumber 
FROM `stories` 
WHERE 
    CASE
        WHEN @rownum%3=0 THEN image IS NOT NULL
        ELSE video IS NOT NULL
    END
   AND (`language_id`='7')
ORDER BY `date_published` DESC 
LIMIT 200

我需要实现我上面写的内容,返回包含图像的前3行和包含视频的下一行。但我不能在WHERE条件中使用@rownum,这将是选择我的序列的完美方式。

1 个答案:

答案 0 :(得分:1)

为什么不在外部查询中执行过滤,例如

SELECT * FROM (
SELECT title, image, video, date_published, 
`language_id`, @rownum:=@rownum+1 AS rownumber 
FROM `stories`, (SELECT @rownum := 0) r ) xx
WHERE 
    CASE
        WHEN rownumber%3=0 THEN image IS NOT NULL
        ELSE video IS NOT NULL
    END
   AND (`language_id`='7')
ORDER BY `date_published` DESC 
LIMIT 200