2015-11-17 55 views
1

我正在创建用户建议应用程序。该应用程序获取查询MySQL服务器和从USER_TABLE带来了10个随机用户,user_imagesMySQL选择RANDOM与多个表

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 

如果有人能帮忙,我会很高兴,谢谢。

+2

那么添加另一个连接? –

+0

是否存在需要帮助的特定错误?像@Dagon说的那样,研究用MySQL查询编写JOIN,或者使用任何数据库服务器。 –

+0

基本上:''left user_image on user_table.id = user_image.userid' –

回答

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

+1

因为在一张可怕的低效率的大桌子上 - 而且不是问题无论如何 –

+0

这很慢,我有超过100万的用户,差不多1.2分钟执行 –

+1

可能应该是'img.userid' –