我尝试按两列对表格进行排序:prioritet
和 id
我想使用 ASC
订购 prioritet
并使用 RAND()
订购 id
到目前为止我得到的查询是:
SELECT id, user_id, active, prioritet
FROM `agents`
WHERE user_id = ' + user_id + ' AND active = \'1\'
ORDER BY prioritet ASC, id ASC, RAND()
知道我做错了什么吗?
最佳答案
这是您的订单
:
ORDER BY prioritet ASC, id ASC, RAND()
它是按 prioiritet
排序,然后按 id
排序。你想要:
ORDER BY prioritet ASC, RAND()
换句话说,根本不要按 id
排序。
这假设id
在每一行上都是唯一的(鉴于名称,这是合理的)。如果 ids 不唯一,则需要更复杂的查询:
SELECT a.id, a.user_id, a.active, a.prioritet
FROM agents a join
(select id, rand() as r
from (select distinct id from agents) a
) randid
on a.id = randid.id
WHERE user_id = ' + user_id + ' AND active = \'1\'
ORDER BY a.prioritet ASC, randid.r, a.id;
也就是说,您需要为每个 id 分配一个随机值,将其重新加入,并进行适当的排序。仅当 id
唯一的假设不成立时才需要此值。
关于MySQL 按两列排序,一个 ASC 和一个 RAND(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21702614/