2013-06-26 177 views
0

我在我的網站上有一個成員搜索功能。 它的基本功能是從學習表中獲取一些信息,併爲每個找到的成員顯示它,除了你自己。排除結果的PHP/MySQL查詢

的$ ID是在記錄的人

現在,這是我當前的查詢:

$sql = " 
SELECT ldn.schermnaam, ldn.geboortedatum, ldn.userid, ldn.foto, ldn.oproep 
FROM leden AS ldn 
WHERE ldn.userid != $id 
"; 

這工作得很好。

現在我想要的是也排除被你阻止的成員。 的blockedmembers表看起來像這樣:

- ID 
- Useridsender (the one that blocked the other one) 
- Useridreceiver (the one that has been blocked) 
- Creation date 

現在我想排除堵塞成員不會在結果列表中顯示它們。

我嘗試使用INNER JOIN和LEFT JOIN,但還沒有想出如何得到一個好的查詢。 任何人都知道我的查詢應該是什麼樣子?

p.s.這是一個動態查詢,所以根據用戶輸入AND語句添加到最後。

回答

6
$sql = " 
SELECT ldn.schermnaam, ldn.geboortedatum, ldn.userid, ldn.foto, ldn.oproep 
FROM leden AS ldn 
WHERE ldn.userid != $id AND ldn.userid NOT IN(SELECT Useridreceiver FROM blocktable WHERE Useridsender=$id) 
"; 

這應該是相當接近我使用一個子選擇,但它也可以使用外部完成加入我覺得從blockedmembers表還

$sql="SELECT ldn.schermnaam, ldn.geboortedatum, ldn.userid, ldn.foto, ldn.oproep 
FROM leden AS ldn 
WHERE ldn.userid != $id AND ldn.userid NOT IN 
(SELECT Useridreceiver FROM blockedmembers WHERE Useridsender =$id)"; 
+0

我認爲這是一個很好的解決方案。 – casraf

+1

我想任何連接都可以使用,或者至少與INNER JOIN不同,如果表默認爲空 –

+0

既然你是第一個......我會感謝你! 很好,謝謝:D 不能upvote你呢。 另外,感謝其餘! – Nick

1

篩選結果的人在回答,使用子選擇。這裏是我使用LEFT JOIN(無子查詢)

您可以使用LEFT JOIN來選擇匹配,那麼不匹配提取出的條目(連接表ID爲NULL)

SELECT ldn.schermnaam, ldn.geboortedatum, ldn.userid, ldn.foto, ldn.oproep 
FROM leden AS ldn LEFT JOIN blockedmembers AS blm 
    ON (blm.Useridsender=$id AND ldn.userid=blm.Useridreceiver) 
WHERE ldn.userid != $id 
AND blm.ID IS NULL 
+0

燁有點晚:( –

+0

原始代碼,而無需任何解釋相關? –

+0

@RoyalBg現在添加的目的 –

3

很多

+0

+1以來提供基於加入版本我懶得自己做:) – Dave

1

你必須使用NOT IN但是工作答案沒有人建議NOT EXISTS,這對您來說可能是更好的選擇。

到這裏看看:NOT IN vs NOT EXISTS

SELECT 
    ldn.schermnaam, ldn.geboortedatum, ldn.userid, ldn.foto, ldn.oproep 
FROM 
    leden AS ldn 
WHERE 
    ldn.userid != $id 
AND 
    NOT EXISTS (
    SELECT 1 
    FROM blockedmembers AS bm 
    WHERE 
     bm.Useridreceiver = ldn.userid 
    AND 
     bm.Useridsender = $id 
)