我尝试在mysqli查询中编写sql代码,以便更频繁地选择优先级更高的行。我有一个数据库,其中所有文章都按优先级排序,但我希望它选择如下(10-最高优先级):
**Priority** 10 3 10 9 7 10 9 1 10
我该怎么做?我试过用更多的方法来解决这个问题,但没有结果。谢谢您。
9o685dep1#
如果您希望优先选择更高优先级的数据,可以执行以下操作:
SELECT * FROM ( SELECT OrderDetailID ,mod(OrderDetailID, 10) + 1 AS priority ,rand() * 10 AS rand_priority FROM OrderDetails ) A WHERE rand_priority < priority ORDER BY OrderDetailID
此查询在w3schools的mysql tryit中运行。mod(orderdetailid,10)+1模拟1-10优先级-您的表中已经有这个值了rand()*10给出一个介于0和10之间的随机数然后通过只过滤随机数小于优先级的结果集,得到优先级越高的结果集。
dojqjjoe2#
如果您的mysql版本支持,您可以使用rank函数。它将按优先级降序排列数据,并对每行进行排序。如果这两行具有相同的优先级,那么这两行将具有相同的排名。然后您可以过滤掉第一级数据,这将始终为您提供最高优先级的行。
Select * FROM ( SELECT col1, col2, priority, RANK() OVER w AS 'rank' FROM MyTable WINDOW w AS (ORDER BY priority) ) MyQuery Where rank = 1
注意:语法可能不正确,请尝试编辑查询。如果你的mysql版本不支持排名,这篇文章可能会帮助你排名。
2条答案
按热度按时间9o685dep1#
如果您希望优先选择更高优先级的数据,可以执行以下操作:
此查询在w3schools的mysql tryit中运行。
mod(orderdetailid,10)+1模拟1-10优先级-您的表中已经有这个值了
rand()*10给出一个介于0和10之间的随机数
然后通过只过滤随机数小于优先级的结果集,得到优先级越高的结果集。
dojqjjoe2#
如果您的mysql版本支持,您可以使用rank函数。它将按优先级降序排列数据,并对每行进行排序。如果这两行具有相同的优先级,那么这两行将具有相同的排名。然后您可以过滤掉第一级数据,这将始终为您提供最高优先级的行。
注意:语法可能不正确,请尝试编辑查询。
如果你的mysql版本不支持排名,这篇文章可能会帮助你排名。