MySQL按两列排序,一个ASC和一个RAND()

时间:2014-02-11 13:02:59

标签: mysql sql

我尝试按两列排序表:prioritetid

我想点prioritet ASCid RAND()

我到目前为止的查询是:

 SELECT id, user_id, active, prioritet 
 FROM `agents` 
 WHERE user_id = ' + user_id + ' AND active = \'1\' 
 ORDER BY prioritet ASC, id ASC, RAND()

任何想法我做错了什么?

1 个答案:

答案 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唯一的假设不正确,您只需要这样做。