Mysql 如果滚动到下一个类别的次数较少,则选择N个具有特定类别限制的随机记录

Mysql 如果滚动到下一个类别的次数较少,则选择N个具有特定类别限制的随机记录,mysql,Mysql,我有一个表,我试图检索一定数量的随机条目,我想在顶部放置一个类别的最大条目数,然后是另一个类别的特定数量 如果第一个类别中没有条目,则允许的条目数将添加到2sd类别的条目数中 例如,我的表有3个类别(类别:“完整”、“部分”、“空”)。我想总共显示12个条目 对于“完整”类别,我想显示8。然后显示3个部分,最后显示1个空部分 如果少于8个完整,假设有5个,那么它将显示5个完整、6个部分和1个空。(缺少3个完整部分,因此3个基本部分+3个额外部分=6) 查询将如何做呢 以下是我实际遇到的问题: S

我有一个表,我试图检索一定数量的随机条目,我想在顶部放置一个类别的最大条目数,然后是另一个类别的特定数量

如果第一个类别中没有条目,则允许的条目数将添加到2sd类别的条目数中

例如,我的表有3个类别(类别:“完整”、“部分”、“空”)。我想总共显示12个条目

对于“完整”类别,我想显示8。然后显示3个部分,最后显示1个空部分

如果少于8个完整,假设有5个,那么它将显示5个完整、6个部分和1个空。(缺少3个完整部分,因此3个基本部分+3个额外部分=6)

查询将如何做呢

以下是我实际遇到的问题:

SELECT *
FROM items
ORDER BY category='complete' DESC, category='partial' DESC, category DESC, RAND() ASC
LIMIT 12

上述查询的问题是它得到了12次完成,而这并不是我想要的。

您可以使用
语句

试着这样做:

(SELECT * FROM items WHERE category = "complete" LIMIT 8)
UNION DISTINCT (SELECT * FROM items WHERE category = "partial" LIMIT 3)
UNION DISTINCT (SELECT * FROM items WHERE category = "" LIMIT 1)

是的,但有什么是不到8完成,它不会滚动到下一个类别。我试图总是显示12条记录。嗯,我想如果数据库中的记录少于12条,这是不可能的。我的数据库中有12条以上的记录,但“完整”类别中不需要8条。那么问题也会一样。