php - mySQL JOIN 查询击败

标签 php mysql join

好吧,我不是 JOIN 的最佳人选,经过这么多年的 mySQL 工作,你认为我现在至少是最低限度的体面。猜猜我从来没有真正做过任何非常复杂的事情,直到现在值得加入一张 table 。所以在这里,我有点困惑,需要一个有用的例子来让我开始工作,一些与我的实际数据相关的东西,我可以使头脑或故事成为我在网上做的所有阅读的原因,其他地方只是给出我一时头疼。我想我可能坚持 JOIN 是一件很难做的神话,他们看起来并不像,但每当我尝试过时,我都会失败。所以无论如何我都在使用 PHP 作为我的服务器端编码,我相信 MySQL 5。

所以在某种程度上这是构造。

我有表信息和表连接

Connections 具有:member_idconnection_idactive

信息有:firstname, lastname, gender, member_id

我应该说每个表包含更多数据,但据我了解,我需要编写一个查询,我可以使用 member_id 作为连接器/外键。我可以在哪里使用信息的两面。我需要知道 active 是否为 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 从信息表中收集有关这些连接的所有信息,因为它与 in 中的 member_id 相同信息表。

所以通俗地说,如果我没有意义,可以说我想从 DB 中列出我所有的 friend 。我的连接表让我知道我连接到哪些人,其中 member_id 是我的 id,connection_id 是我在另一个表上的 friend 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 

更新

如果是这种情况,那么您很可能会有一个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

关于php - mySQL JOIN 查询击败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9238436/

相关文章:

SQL 和在多个表上存储外键与通过表连接进行查询

php - laravel一对多记录插入和更新解决方案

php - 编写这两个 SQL 查询的更好方法?

php - 意外的 INSERT ... SET 查询行为

mysql - 查找表在 2019 年是一种好的数据库实践吗?

mysql - MySQL 中连接两个行数不同的表

mysql - 左连接不起作用

php - 根据条件是否满足更改文本颜色

php - 循环中的复选框 - PHP

php - 使用 AJAX 更新记录而不刷新表单