【问题标题】:MySql select order by rand not working with GROUP_CONCATMySql select order by rand 不与 GROUP_CONCAT 一起使用
【发布时间】:2014-01-30 13:44:06
【问题描述】:

有表用户ID

Id
--
1
2
3
4
5
6
7
8

我想选择 rand id 用逗号分隔, 我有如下查询

SELECT GROUP_CONCAT(Id) FROM `userid` order by rand(Id);

但即使使用了 rand(Id),它也会按升序显示结果,如下所示 1,2,3,4,5,6,7,8

预期结果应该是随机和逗号分隔的随机顺序,我怎样才能得到? ..

【问题讨论】:

    标签: mysql


    【解决方案1】:

    “排序依据”是关于您获得的所有结果。因为你只得到一个结果,所以你随机化了那个结果的顺序。

    你可能会做这样的事情,虽然它几乎不是很有效:

    SELECT GROUP_CONCAT(Id) FROM (SELECT Id FROM `userid` ORDER BY rand(Id)) a
    

    通过这种方式,您可以检索所有 Id,随机排列它们的顺序,然后 group_concat 它们。

    旁注:如果您不做任何其他事情,您可能只想检索 id 并稍后将它们随机化?否则,您可以查看此博客以获得更好的随机检索:http://jan.kneschke.de/projects/mysql/order-by-rand/

    【讨论】:

    • 它显示错误“每个派生表必须有自己的别名”
    • 这很容易解决,我会编辑,但请记住这只是一个提示,您可能可以从这里与手册一起获取它? :D
    • (我添加的'a'是您在选择时获得的表格的别名)
    • 是的,它的工作原理,实际上我正在尝试在那个错误之后放置别名......它惊人的'a'......
    • 但总是显示与 4,8,1,5,2,6,3,7 相同的结果,你能检查一下这个.. 我错过了什么吗?
    【解决方案2】:

    您想将order by 放在group_concat() 语句中:

    SELECT GROUP_CONCAT(Id order by rand())
    FROM `userid` ;
    

    【讨论】:

      猜你喜欢
      • 2015-09-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-12
      • 1970-01-01
      • 2012-12-28
      • 2012-01-27
      相关资源
      最近更新 更多