Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL按两列、一个ASC和一个RAND()排序_Mysql_Sql - Fatal编程技术网

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可能希望所有东西都具有相同的优先级,但顺序明显是随机的。这在某些方面似乎是合理的。很好的答案解决了我的问题!尽快接受。非常感谢:)