MySQL选择带有多个表的RANDOM

时间:2015-11-17 20:47:52

标签: php mysql sql

我正在创建用户建议应用。该应用程序获取查询mysql服务器并从user_table,user_images

带来10个随机用户
user_table ===> id, name, username
user_image ===> id, userid, image_path, image

我从explainextended.com得到了这个脚本工作得很好,我的问题是将user_image表添加到查询中

                SELECT  id, name, username
                FROM    (
                          SELECT  @cnt := COUNT(*) + 1,
                                @lim := 10
                          FROM    user_table 
                        ) vars
                STRAIGHT_JOIN
                        (
                          SELECT  r.*,
                                @lim := @lim - 1
                          FROM    user_table r
                          WHERE   (@cnt := @cnt - 1)
                                AND RAND() < @lim / @cnt
                        ) i 

如果有人能提供帮助,我将很高兴,谢谢你。

1 个答案:

答案 0 :(得分:0)

为什么不在那之前使用随机订单限制?

SELECT r.id, r.name, r.username FROM user_table ORDER BY RAND() LIMIT 10

与user_pictures的连接变得非常简单。

修改

回答原始问题,因为上面的解决方案太慢了。您可以将结果内部加入STRAIGHT_JOIN。

SELECT r.*, img.*, @lim := @lim - 1 FROM user_table r LEFT JOIN user_images img ON (r.id = img.userid) WHERE (@cnt := @cnt - 1) AND RAND() < @lim / @cnt