[英]mySQL JOIN query beat down
好吧,对于JOIN来说,我并不是最好的,在与mySQL一起工作了这么多年之后,您认为我现在至少会表现得很体面。 猜猜我从来没有真正从事过任何超级复杂的工作,直到现在值得加入一张桌子。 所以在这里,我有点困惑,需要一个有用的例子来引导我前进,这与我的实际数据有关,我可以根据自己的想法或故事来做所有我在线上正在阅读的内容,否则我现在头疼。 我想我可能对JOIN的神话感到固执,这是一件很难的事,他们似乎并不喜欢,但是一旦我尝试过,我都会失败。 所以无论如何,我都将PHP作为服务器端编码,并且相信MySQL 5。
因此在一定程度上继承了这一构架。
我有表信息和表连接 。
连接具有: member_id
, connection_id
, active
信息具有: firstname
, lastname
, gender
, member_id
我应该说这些表在每个表中包含更多数据,但是据我了解,我需要编写一个查询,该查询可以将member_id用作连接器/外键。 在这里我可以使用双方的信息。 我需要知道active is 1
,然后我需要了解上述所有列以供参考。
我试过了
SELECT member_id,
connection_id,
active,
firstname,
lastname,
gender,
member_id
FROM connections, information
WHERE connection.member_id = information.member_id AND
connection.active = 1
我已经尝试过
SELECT * FROM connections, information
WHERE connection.member_id = information.member_id AND
connection.active = 1
对于第一个,我得到的member_id雄心勃勃,这在一定程度上是可以理解的,我认为这是两个表之间匹配列的原因。 然后第二个查询不能很好地为我服务,因为它只能由一个人执行。
我的终极目标是在连接表中查找特定member_id的所有连接,同时使用connection_id与信息表中的member_id相同的信息从信息表中收集有关那些连接的所有信息。
因此,用通俗易懂的话来说,如果我没有道理,可以说我想从数据库中列出我所有的朋友。 我的连接表让我知道与谁连接的人,其中member_id是我的ID,而connection_id是我的朋友member_id在另一个表上。 希望这更有意义。 这就是我在查询中遇到麻烦并尝试正确编写它的地方。 如果我可以得到一个合理的示例,我想我也许可以更好地理解JOIN的含义,这也无济于事,我也不知道哪种类型的JOIN最适合我的需求。
编辑....
确定,根据以下评论的要求。 表看起来像这样的示例数据的预期输出:
连接表
member_id, connection_id, active
1 | 2 | 1
1 | 3 | 1
1 | 4 | 1
1 | 5 | 1
2 | 1 | 1
2 | 5 | 1
3 | 1 | 1
信息表
member_id, firstname, lastname, gender, ...other unimportant rows for this query
1 | Chris | Something | m | ....
2 | Tony | Something | m | ....
3 | Brandon | Something | m | ....
4 | Cassie | Something | f | ....
5 | Jeff | Something | m | ....
6 | John | Something | m | ....
现在,从连接表中,我需要收集与我的member_id关联的所有connection_id,其中active为1,然后从信息表中,收集每个人的名字,姓氏,性别。。现在,我知道我可以做这2步了,在这里汇集所有的connection_id。连接然后通过某种循环运行它们,并从第一个查询一个接一个地获得结果ID,但对我来说,这似乎有点晦涩难懂,并且需要避免大量的过程,这使我到了这里。发布到到目前为止共享的许多内容,试图帮助我的结果达到
1 | Chris | Something | m | 2
1 | Chris | Something | m | 3
1 | Chris | Something | m | 4
1 | Chris | Something | m | 5
我希望看到返回的内容类似于
2 | Tony | Something | m
3 | Brandon | Something | m
4 | Cassie | Something | f
5 | Jeff | Something | m
看完之后,我想我还需要知道与我的member_id匹配的friendID列,但这就是在最初的障碍之后需要弄清楚的一点
该错误是在你的WHERE
子句,因为代替Connections
你写的Connection
,然后服务器生成的错误。
...
WHERE connection.member_id = information.member_id AND
connection.active = 1
尝试这个:
SELECT a.Member_ID,
a.FirstName,
a.LastName, a.gender,
b.Connection_ID
FROM Information a INNER JOIN Connections b
on a.Member_ID = b.Member_ID
WHERE b.`Active` = 1
UPDATE
如果真是这样,那么您很可能会有一个SELF JOIN
SELECT DISTINCT b.Connection_ID,
c.*
FROM Information a INNER JOIN Connections b ON
a.Member_ID = b.Member_ID
INNER JOIN Information c ON
b.Connection_ID = c.Member_ID
WHERE b.`Active` = 1
AND a.Member_ID = 'ID HERE' -- If you want to get for specific member
第一个错误是“模棱两可”而不是雄心勃勃的。 模糊意味着SQL引擎不知道您在谈论哪一列,因为您有两个具有相同名称的列(不同的表,但仍然)。
您可以通过指定表名以及列出要选择的列的列名来解决此问题。
例如
SELECT connections.member_id, connection_id, active, firstname, lastname, gender, information.member_id FROM connections, information WHERE connections.member_id = information.member_id AND connections.active = 1
仅返回一条记录的问题表明,只有一条记录与您的查询匹配,但是很难猜测。
尝试更改为:
SELECT * FROM connections c JOIN information i ON i.member_id = c.member_id WHERE c.active = 1
尝试这个:
SELECT *
FROM information
LEFT OUTER JOIN connections
ON information.member_id = connections.member_id
WHERE connections.active = 1;
您加入了错误的表。 你说:
其中member_id是我的ID,connection_id是我的朋友,在另一个表上的member_id
然后,您需要匹配的是connections.connection_id和information.member_id。 最简单的解决方案是:
select c.member_id, c.connection_id, c.active from connections c
join information i on c.connection_id = i.member_id
where c.active = 1 and c.member_id = @yourId
就这样 :)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.