在比较两条记录的条件下,mysql连接表

时间:2017-06-27 16:08:14

标签: mysql sql

我正在尝试使用on语句创建一个左连接,该语句在两个记录中有要求。基本上,我试图通过 groupId userId

来确定两个用户是否是一个组的成员

这是我开始的地方

LEFT JOIN groups AS g1 ON g1.status = "active" AND g1.userId = "user1"
LEFT JOIN groups AS g2 ON g2.status = "active" AND g1.groupId = g2.groupId AND g2.userId = "user2"

两个连接的问题是第一个连接将选择满足此条件的第一个可用记录。由于 groupId ,第二次加入将从第一次加入生成。如果第二个的groupId相同,这可能有效。但是,情况并非如此,因为用户可以是许多不同组的成员。基本上,我正在尝试创建一个连接语句,试图在两个用户之间找到一个类似的组(通过 groupId )。如果该组不存在则只返回null(我使用左连接的原因)。

如何创建一个比较两个记录之间类似groupId的连接?

由于

这是整个查询

SELECT u*, code.description AS statusText...., CASE WHEN u.id = "ME" THEN 1 ELSE g2.groupId END AS public
FROM users AS u
LEFT JOIN codes AS code ON code.code = u.status
LEFT JOIN groups AS g1 ON g1.status = "active" AND g1.userId = u.id
LEFT JOIN groups AS g2 ON g2.status = "active" AND g1.groupId = g2.groupId AND g2.userId = "ME"
WHERE u.id = :u
LIMIT 1

ME等于您的用户登录,并且:您是我们正在查找的用户

基本上,我试图比较你和另一个用户是否是同一组的一部分。

结果看起来像一个包含以下详细信息的数组

[userId] => 1
[date] => 2015-06-16 00:00:00
[player] => first name
[email] => email 
....
[public] => 1   <- this is the important variable i am trying to get. I want to return a number that i will treat as a boolean. The number tells me that i have a group in common with the user i am looking up

小组表

| userId | groupId | colum1 | ...  | 
+--------+---------+--------+------+
|    1   |    1    |    1   | ALL  | 
+--------+---------+--------+------+
|    1   |    5    |    1   | NONE | 
+--------+---------+--------+------+
|    6   |    1    |    1   | ALL  | 
+--------+---------+--------+------+
|    2   |    3    |    1   | NONE | 
+--------+---------+--------+------+

从表格数据的这个示例中,您可以看到用户1和用户6属于同一组。如果这是表中唯一的数据,那么我的join语句将起作用。但是,情况并非如此,如果用户1和ME都是第5组的一部分,我的陈述将失败

我不想使用子查询

0 个答案:

没有答案