2012-09-13 90 views
0

我有2個表返回行,如果在其他表中不存在的

members 
======= 
id 
f_name // get these values. 
l_name 
email 

friends 
======= 
to 
from 

的用戶就是我想要的是價值$ member_id,如果存在「到」或「從」我希望它不返回該行的另一個值,因此只顯示非朋友。

我創建一個頁面,允許成員通過數據庫搜索通過電子郵件或名稱添加他們的朋友。

我想返回來自成員的所有行,這些成員在朋友表的「to」或「from」列中沒有用戶標識記錄。

我知道如何做最基本的mysql,但是對於我來說連接是一個問題,我真的不知道如何編寫它們,如果任何人都可以幫我解決,甚至可以解釋一下,那會很棒!

My query now: 
    $query = "SELECT * FROM members WHERE f_name LIKE '%" . $word . "%' OR l_name LIKE '%" . $word . "%' OR mc_name LIKE '%" . $word . "%' OR email LIKE '%" . $word . "%' LIMIT 10"; 
//Where $word is the search term. 

修改後的查詢

SELECT * FROM members WHERE id NOT IN (SELECT to FROM friends WHERE frm=$member_id) AND $member_id NOT IN (SELECT frm FROM friends WHERE to=$member_id) AND f_name LIKE '%" . $word . "%' OR l_name LIKE '%" . $word . "%' OR mc_name LIKE '%" . $word . "%' OR email LIKE '%" . $word . "%' LIMIT 10 
+0

而且..你到目前爲止嘗試過什麼? – dbf

+0

我張貼我當前的查詢生病也添加我的while語句獲取值,如果這是相關的。 – arennaker

+0

如果您放置表格的所有列,它會有所幫助。 – hjpotter92

回答

0

編輯

因此,假設一個用戶ID爲3:

SELECT * 
FROM members 
WHERE id <> 3 
AND id NOT IN (SELECT to FROM friends WHERE from = 3) 
AND id NOT IN (SELECT from FROM friends WHERE to = 3) 
[Other conditions....]; 

SELECT * 
FROM members 
LEFT JOIN friends 
ON (members.id = friends.to 
    OR members.id = friends.from) 
AND (members.to = 3 
    OR members.from = 3) 
WHERE friends.to IS NULL 
AND id <> 3 
[Other conditions....]; 

也許考慮更改「from」和「to」列的名稱,以避免混淆,因爲FROM和TO是保留字。

另外,在查詢之前,您可以使用保留字EXPLAIN來查看被提取的行數的差異。

+0

SELECT * FROM members WHERE id NOT IN(SELECT to FROM friends WHERE frm = $ member_id)AND $ member_id NOT IN(SELECT frm FROM friends WHERE to = $ member_id )AND f_name LIKE'%「。$ word。」%'OR l_name LIKE'%「。$ word。」%'或mc_name LIKE'%「。$ word。」%「或email LIKE'%」。$ word。 「%'LIMIT 10這是我現在擁有的。 – arennaker

+0

你想列出所有的「非朋友」?或者只知道一個會員沒有朋友? –

+0

是的,我想列出用戶的所有非朋友,朋友請求保存在朋友表中,其中to和frm列是2個朋友的id。 – arennaker

0

你也許可以做到這一點使用LEFT JOIN,將返回來自成員的所有行,即使有對朋友的表中沒有相應的行。

事情是這樣的:

SELECT a.*, f.* FROM members m LEFT JOIN friends f 

一個偉大的文章,瞭解了很多連接有是this one.

+0

我試圖做的事情就像加入oppisite雖然如果值不在朋友表中,它應該顯示結果。我仍然閱讀文章。 – arennaker

+0

它看起來像我需要排除加入... – arennaker

+0

嗯,那麼我想你是對的..也許然後像這樣: SELECT a。*,f。* FROM members m LEFT JOIN friends f ON a.id = f.id WHERE f.to IS NULL和f.from IS NULL – lleite

相關問題