2012-03-25 28 views
0

這裏就是我想要做的:MySQL的加入 - 選擇COL1 COL2地方在其他表(過濾)山口匹配

1) select tableB.column1 WHERE tableB.column2 = some_var

2) select tableA.column1 WHERE tableA.column2 was a result from step one.

能在這一個選擇來完成。最好的辦法是做到這一點,特別是在性能方面。我使用的是PHP。

編輯: 我有一個基於對話的消息系統。 1 convo table和1 replies table。回覆表包含列:responder and convo_id。加載convo,我得到所有convo_id的答覆。

我想使用convoId獲取所有響應者的convo,並進入usertable並選擇響應者的所有化身,然後將數組中的化身存儲並根據需要回顯出來。

+0

我想多一點點的信息會有所幫助。真的取決於A依賴於什麼。 – Gohn67 2012-03-25 07:11:33

回答

0

你可能要嘗試下面的SQL語句

SELECT u.avatar 
FROM usertable u 
JOIN replies r ON u.responder_id = r.responder_id 
WHERE r.convo_id = 1234 

這將讓誰ID爲1234

+0

謝謝大家的回答。這個答案適用於我,因爲它使用了convo_id上的where。我還將在select中使用DISTINCT,因爲我將重用相同用戶的頭像。 – Dor1000 2012-03-25 22:12:41

+0

你使用的是什麼速記? 「usertable你」。是爲了表現還是隻是可讀性?有人可以將我的文檔鏈接到它。我不知道它叫什麼。 – Dor1000 2012-03-25 22:14:34

+0

我相信他們被稱爲別名。我不認爲它們會影響性能,但通常用於可讀性,因爲表名可能不是描述性的,或者只是簡單的長。正如您正確指出的那樣,DISTINCT將是必要的,因爲我的SQL語句會給出重複的頭像。 – 2012-03-26 00:14:00

1

嘗試以下操作:

select a.Column1 
FROM tableA a 
LEFT JOIN tableB b ON a.Column2 = b.Column1 

你也可以使用子查詢,但是這不太高性能。

0

參加了對話中的所有用戶的頭像下面是我決定去。它建立一個數組($ avatars),其中鍵是用戶名,值是頭像。

$result = mysql_query("SELECT 
    DISTINCT users.avatar,replies.sender 
    FROM users 
    JOIN replies 
    ON users.username = replies.sender 
    WHERE replies.convo_id = '$convoID' 
"); 
while($array = mysql_fetch_assoc($result)){ 
    $avatars[$array['sender']] = $array['avatar']; 
} 
+0

convoID是一個十六進制字符串,所以在引號中。我誤以爲我只是從一列中選擇。我沒有意識到。 – Dor1000 2012-03-25 22:47:32

相關問題