我正在创建用户建议应用。该应用程序获取查询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
如果有人能提供帮助,我将很高兴,谢谢你。
答案 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