MySql:生成随机行作为子查询

时间:2014-02-25 11:05:52

标签: mysql sql

我在子查询中遇到了相关问题。

我有2张桌子:
- table1:包含带有groupidgroupenamecategoryid的“群组”
- table2:告诉哪些人是哪个组的成员(包含字段:useridgroupid

我想问我的数据库给我:
每个来自特定“category”的所有群组:
- groupidgroupname
- 随机选择每组4名成员

我按照问题MySQL select 10 random rows from 600K rows fast生成了特定组的4个随机成员。

如果我单独运行查询,它的效果很好。

但如果我尝试将我的子查询合并到我的“常规查询”中:

SELECT 
g.groupid, g.groupname, 
(
SELECT GROUP_CONCAT(table2.userid SEPARATOR ",") 
    FROM table2, (
        SELECT userid AS uid
        FROM table2 
        WHERE table2.groupid = g.groupid 
        ORDER BY RAND( ) 
        LIMIT 4 
    ) tmp 
WHERE table2.userid = tmp.uid
) AS randomusers 
FROM table1 AS g WHERE g.categoryid = ? 

...我得到"Unknown column 'g.groupid' in 'where clause'" ERROR.


我尝试将子查询传递给LEFT JOIN但我无法弄清楚如何正确地执行它,因为我的每次尝试都没有成功。

对此有何帮助?谢谢:))

1 个答案:

答案 0 :(得分:0)

如果我理解正确,您的查询看起来过于复杂

SELECT t1.groupid, 
       t1.groupname, 
       (SELECT GROUP_CONCAT(table2.userid) FROM table2 WHERE table2.userid = t1.userid ORDER BY RAND() LIMIT 4) AS `users`
FROM table1 AS t1

尚未对其进行测试,但此查询应返回每组的前四个随机元素