sql查询-更频繁地选择优先级更高的行

vybvopom  于 2021-06-20  发布在  Mysql
关注(0)|答案(2)|浏览(355)

我尝试在mysqli查询中编写sql代码,以便更频繁地选择优先级更高的行。我有一个数据库,其中所有文章都按优先级排序,但我希望它选择如下(10-最高优先级):


**Priority**

10
3
10
9
7
10
9
1
10

我该怎么做?我试过用更多的方法来解决这个问题,但没有结果。谢谢您。

9o685dep

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之间的随机数
然后通过只过滤随机数小于优先级的结果集,得到优先级越高的结果集。

dojqjjoe

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版本不支持排名,这篇文章可能会帮助你排名。

相关问题