MySQL按两列、一个ASC和一个RAND()排序
我正在尝试按两列排序一个表:MySQL按两列、一个ASC和一个RAND()排序,mysql,sql,Mysql,Sql,我正在尝试按两列排序一个表:prioritet和id 我想用ASC订购prioritet和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() 你知道我做错了什么吗?这是你的订单: ORDER BY p
prioritet
和id
我想用ASC
订购prioritet
和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()
你知道我做错了什么吗?这是你的
订单:
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
是唯一的时,才需要此选项。请发布表的结构、数据样本和所需输出即使这是正确的,为什么我们要按字段排序,然后随机排序?这毫无意义,而且肯定对我们的服务器资源不利。。我说的对吗?@MateiMihai。按rand()
排序的性能不应该比一般的排序(价格昂贵)差太多。字段prioritet
包含优先级(基于名称的猜测)。OP可能希望所有东西都具有相同的优先级,但顺序明显是随机的。这在某些方面似乎是合理的。很好的答案解决了我的问题!尽快接受。非常感谢:)