如何解决mysql查询以从3种类型中获取项目
我有一个带有3种数据类型(文本,图像,视频)的mysql表,$ type列保存数据的类型。 (类型= 1表示文本,2表示图像,3表示视频)
以前,我仅能按其位置顺序获得18条记录
SELECT * FROM tbl_news WHERE news_status=1 AND show_timeline = 1 ORDER BY position DESC LIMIT $start,18
现在我的需求是需要从表中获取18条记录,该记录应该具有6个文本,6个图像和6个具有分页支持的视频。
输出应为 (文本,图像,视频,文本,图像,视频,文本,图像,视频,文本,图像,视频,文本,图像,视频,文本,图像,视频)
解决方法
如果运行的是MySQL 8.0,则可以为此使用窗口函数:
select *
from (
select n.*,row_number() over(partition by type order by position desc) rn
from tbl_news n
where news_status = 1 and show_timeline = 1
) n
where rn <= 5
order by rn,type
在早期版本中,一种(效率较低)方法使用子查询:
select n.*
from tbl_news n
where
news_status = 1
and show_timeline = 1
and (
select count(*)
from tbl_news n1
where
n1.type = n.type
and n1.news_status = n.news_status
and n1.show_timeline = n.show_timeline
and n1.position <= n.position
) <= 5
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。