为了简单起见,我有一个包含列的表:
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,这将是选择我的序列的完美方式。
答案 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