我尝试按两列排序表:prioritet
和id
我想点prioritet
ASC
和id
RAND()
我到目前为止的查询是:
SELECT id, user_id, active, prioritet
FROM `agents`
WHERE user_id = ' + user_id + ' AND active = \'1\'
ORDER BY prioritet ASC, id ASC, RAND()
任何想法我做错了什么?
答案 0 :(得分:4)
这是您的order by
:
ORDER BY prioritet ASC, id ASC, RAND()
按prioiritet
排序,然后按id
排序。你想要:
ORDER BY prioritet ASC, RAND()
换句话说,请勿按id
排序。
这假设id
在每一行上都是唯一的(给定名称是合理的)。如果id不是唯一的,则需要更复杂的查询:
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
唯一的假设不正确,您只需要这样做。