簡體   English   中英

MySQL聯接查詢失敗

[英]mySQL JOIN query beat down

好吧,對於JOIN來說,我並不是最好的,在與mySQL一起工作了這么多年之后,您認為我現在至少會表現得很體面。 猜猜我從來沒有真正從事過任何超級復雜的工作,直到現在值得加入一張桌子。 所以在這里,我有點困惑,需要一個有用的例子來引導我前進,這與我的實際數據有關,我可以根據自己的想法或故事來做所有我在線上正在閱讀的內容,否則我現在頭疼。 我想我可能對JOIN的神話感到固執,這是一件很難的事,他們似乎並不喜歡,但是一旦我嘗試過,我都會失敗。 所以無論如何,我都將PHP作為服務器端編碼,並且相信MySQL 5。

因此在一定程度上繼承了這一構架。

我有表信息和表連接

連接具有: member_idconnection_idactive

信息具有: firstnamelastnamegendermember_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM