mysql查询从3种类型获取项目
我有一个mysql表,有3种数据类型:文本、图像、视频$type列保存数据类型。类型=1表示文本,2表示图像,3表示视频 以前,我只是从它的位置得到18条记录mysql查询从3种类型获取项目,sql,mariadb,sql-order-by,greatest-n-per-group,window-functions,Sql,Mariadb,Sql Order By,Greatest N Per Group,Window Functions,我有一个mysql表,有3种数据类型:文本、图像、视频$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个视频与分页支持 输出应该是 文本、图像、视频、文本、图
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
我的服务器版本:10.1.44-MariaDB-0ubuntu0.18.04.1-ubuntu18。04@binuj-10.2有行号等。升级时间。@binuj:直到您升级。。。我用早期版本的解决方案更新了我的答案。