一个操作三个 MySQL 个查询!?我想不是
Three MySQL queries for one operation!? I think not
我会尽量切题。这就是我想要做的。
我有两个 table 需要从中提取数据:
membershipstable = || groupid || templateid || userid
|| 2 || 1 || 0
|| 0 || 1 || 3
|| 2 || 0 || 4
userstable = || id || firstname || lastname || email
我想做的是:
SELECT * FROM userstable WHERE id = userid (in memberships table) -- AND/OR -- WHERE id = userid IF groupid is associated with templateid, and templateid is equal to $currenttemplateid
或者用人类的话说:查看 memberships
table,如果找到包含匹配 $currenttemplateid
的 templateid
的行,则带回 userid
从那一行。然后,查看 userstable
并检索具有 id
与我们在上面找到的 userid
相匹配的每个用户的信息。此外,如果您发现任何包含匹配 $currenttemplateid
的 templateid
的行,则查看该行中的 groupid
并带回任何行中的任何 userid
groupid
,然后再次检索 id
与上面找到的 userid
相匹配的任何用户的信息。
如果我的解释有些混乱,如果我的问题有点新鲜(另外,别担心,我在实际项目中没有使用未经准备的陈述),我很抱歉...我知道这可以在单个、高效且漂亮的查询中使用 MySQL 完成,但我完全不知道该查询到底是什么样子...非常感谢您的帮助。 :)
使用三向加入查找与所选成员在同一组中的所有用户。
SELECT u.*
FROM usertable AS u
JOIN membershiptable AS m1 ON u.id = m1.userid
JOIN membershiptable AS m2 ON m1.groupid = m2.groupid
WHERE m2.templateid = $currenttemplateid
对于以后可能会来寻找答案的人来说,如果用户已分配给模板和组,则可能会在 return 中出现重复条目也分配给模板。一个解决方案是将 DISTINCT
直接放在查询的 SELECT
部分之后。例如
$query = "
SELECT DISTINCT
u.id,
u.firstname,
u.lastname,
u.username,
u.email
FROM $userstable AS u
INNER JOIN $membershipstable AS M1 ON u.id = M1.userid
INNER JOIN $membershipstable AS M2 ON M1.groupid = M2.groupid
WHERE M2.templateid = :currenttemplateid
";
这 return 只有非重复结果。
我会尽量切题。这就是我想要做的。 我有两个 table 需要从中提取数据:
membershipstable = || groupid || templateid || userid
|| 2 || 1 || 0
|| 0 || 1 || 3
|| 2 || 0 || 4
userstable = || id || firstname || lastname || email
我想做的是:
SELECT * FROM userstable WHERE id = userid (in memberships table) -- AND/OR -- WHERE id = userid IF groupid is associated with templateid, and templateid is equal to $currenttemplateid
或者用人类的话说:查看 memberships
table,如果找到包含匹配 $currenttemplateid
的 templateid
的行,则带回 userid
从那一行。然后,查看 userstable
并检索具有 id
与我们在上面找到的 userid
相匹配的每个用户的信息。此外,如果您发现任何包含匹配 $currenttemplateid
的 templateid
的行,则查看该行中的 groupid
并带回任何行中的任何 userid
groupid
,然后再次检索 id
与上面找到的 userid
相匹配的任何用户的信息。
如果我的解释有些混乱,如果我的问题有点新鲜(另外,别担心,我在实际项目中没有使用未经准备的陈述),我很抱歉...我知道这可以在单个、高效且漂亮的查询中使用 MySQL 完成,但我完全不知道该查询到底是什么样子...非常感谢您的帮助。 :)
使用三向加入查找与所选成员在同一组中的所有用户。
SELECT u.*
FROM usertable AS u
JOIN membershiptable AS m1 ON u.id = m1.userid
JOIN membershiptable AS m2 ON m1.groupid = m2.groupid
WHERE m2.templateid = $currenttemplateid
对于以后可能会来寻找答案的人来说,如果用户已分配给模板和组,则可能会在 return 中出现重复条目也分配给模板。一个解决方案是将 DISTINCT
直接放在查询的 SELECT
部分之后。例如
$query = "
SELECT DISTINCT
u.id,
u.firstname,
u.lastname,
u.username,
u.email
FROM $userstable AS u
INNER JOIN $membershipstable AS M1 ON u.id = M1.userid
INNER JOIN $membershipstable AS M2 ON M1.groupid = M2.groupid
WHERE M2.templateid = :currenttemplateid
";
这 return 只有非重复结果。