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

标签 mysql sql

我尝试按两列对表格进行排序:prioritetid

我想使用 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/

相关文章:

php - 试图创建数据库,但出现 mysql 错误 [Syfony2]

mysql - SQL - 最接近 Now() 但唯一的行

MySQL:减去不同 ID 的时间戳

sql - 就预编译而言,语句与准备好的语句

mysql - 创建列允许 NULL 但默认值设置为 NOT NULL

php - 需要帮助将 SQL 查询转换为 Laravel eloquent

php - 存储和查询发票数据和账户数据的最佳方式是什么?

php - LIMIT 在页面中查看数据库中的所有数据

php - symfony 子查询中出现错误

sql - 如何仅在表中的字段更改值之前对表中的字段进行分组(SQL Server)