我们有3张 table
- membersurlss,包含 ID、用户名等字段
- 具有 ID、用户名等字段的用户
- matrix1 包含字段 ID、用户名 ....
现在我们希望在查询中进行 2 项检查。
- 所有 3 个表的“用户名”字段值必须匹配。
- 仅随机选取membersurls 表中超过1 个条目的记录。
这是我们尝试过的查询,但没有找到正确的查询,这意味着它总是选取 1 条记录,但不会选取任何其他随机记录。
select membersurlss.Username, COUNT(membersurlss.ID)
from membersurlss
INNER JOIN users ON membersurlss.Username=users.Username
INNER JOIN matrix1 ON matrix1.Username=users.Username
having COUNT(membersurlss.ID)>1
order by rand() limit 0,1
我们想选取一条随机记录。
最佳答案
您的查询将计算所有用户的 ID。为了计算每个用户的 ID,您需要使用 GROUP BYmembersurlss.Username
。
select membersurlss.Username, COUNT(membersurlss.ID)
from membersurlss
INNER JOIN users ON membersurlss.Username=users.Username
INNER JOIN matrix1 ON matrix1.Username=users.Username
GROUP BY membersurlss.Username
having COUNT(membersurlss.ID)>1
order by rand() limit 0,1
如果users
和matrix1
表中的Username
是唯一的,那么这应该有效。
如果 membersurlss.ID
是唯一的(或主键),您应该使用 DISTINCT
以便仅计算 membersurlss
表中的出现次数:
select membersurlss.Username, COUNT(DISTINCT membersurlss.ID)
from membersurlss
INNER JOIN users ON membersurlss.Username=users.Username
INNER JOIN matrix1 ON matrix1.Username=users.Username
GROUP BY membersurlss.Username
having COUNT(DISTINCT membersurlss.ID)>1
order by rand() limit 0,1
关于php - 内连接包含 3 个表的计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36513946/