如何获取包含一个特定id行的随机行

时间:2013-09-03 18:59:43

标签: mysql

我目前有一个查询,其中我从!= $this->player_id的不同表格中选择* - >这很好。

看起来如下:

$sql = "
    SELECT pi . * , p . *
    FROM player_img pi, player p
    WHERE pi.player_img_category_id = $this->category_id
    AND pi.player_img_player_id = p.player_id
    AND pi.player_img_player_id != $this->player_id";

我现在想做的事情有点不同:

  • 选择随机结果并按限制排序10
  • 在随机结果之间需要有一个特定行 - 此行应基于$this->player_id

为了得到随机结果,我想我可以做类似的事情:

ORDER BY RAND() LIMIT 10

- 我如何确保包含我的特定行:

pi.player_img_player_id == $this->player_id - 我不知道。 有什么建议吗?

修改 Allinone的回答做了我想做的事 - 作为奖金问题,我想知道是否有可能通过ASC p.player_firstname对他的例子进行排序?

2 个答案:

答案 0 :(得分:1)

如何将UNION与两个查询一起使用但条件不同

SELECT q.* FROM (
    SELECT pi . * , p . *
    FROM player_img pi, player p
    WHERE pi.player_img_category_id = $this->category_id
    AND pi.player_img_player_id = p.player_id
    AND pi.player_img_player_id != $this->player_id
    UNION ALL
    SELECT pi . * , p . *
    FROM player_img pi, player p
    WHERE pi.player_img_category_id = $this->category_id
    AND pi.player_img_player_id = p.player_id
    AND pi.player_img_player_id = $this->player_id 
) q ORDER BY RAND() LIMIT 10

答案 1 :(得分:1)

您可以使用FIND_IN_SET()或FIELD()函数。您的order by子句如下所示:

ORDER BY FIND_IN_SET(pi.player_img_player_id, '$this->player_id') desc, rand()

查看更多:mysql order by a fixed list