首页 文章

MySQL - 第一行是RANDOM,所有其他行都是DESC(如何)

提问于
浏览
-1

我有一个复杂的MySQL查询,我想要 the first row of the result to be a random row of the query result, and all following rows to be ordered by date, desc .

我希望这可以在不必使用UNION或必须两次调用mysql_query()的情况下完成 . 我使用PHP作为脚本语言 .

这是一个类似于地雷的问题,但那里的答案对我的特定情况不起作用:mysql query to select one specific row and another random row

所以,我的问题是它是否可以通过ORDER BY或任何其他方法完成 .

谢谢 .

2 回答

  • 1

    试试这个查询 -

    SELECT t1.* FROM 
      (SELECT * FROM table ORDER BY RAND()) t1, (SELECT @s:= NULL) t2
        ORDER BY @s:=IF(@s IS NULL, 0, 1), date DESC
    

    SELECT t1.* FROM
      table t1,
      (SELECT @rand_id:=id FROM (SELECT id FROM actor ORDER BY RAND()) t LIMIT 1) t2
        ORDER BY IF(t1.id = @rand_id, 0, 1), date DESC
    
  • 2

    我不认为这是可能的,或者至少,不是琐碎的 . 就集合而言 - 你要求数据库提供两个相互矛盾的东西 - 一组,随机排序,另一组按日期排序等 . 为了得到你想要的结果,你必须一起组合两组 . 如果您只想对数据库进行一次调用,则可以将其封装在存储过程中 .

    EDIT

    如果存储过程(或函数)由于某种原因可用,则视图也可以封装此逻辑 .

相关问题