2013-06-26 5 views
0

내 웹 사이트에 회원 검색 기능이 있습니다. 기본적으로 leden 테이블에서 정보를 얻고 자신을 제외한 발견 된 각 멤버에 대해 표시합니다.결과를 제외 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) 
"; 

이 내가 선택 하위를 사용하고 아주 가까이 있어야 할뿐만 아니라 외부를 사용하여 수행 할 수 있습니다 내 생각에 참여도

$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

필터 결과 사람들이 서브 셀렉트를 사용하여 응답하고 있습니다. 여기에 광산은 좌 (부속없이) 가입 사용하고

그런 다음, 일치를 선택 당신은 그러나 NOT IN를 사용하여 작업 응답이 (조인 된 테이블의 ID가 NULL IS)없이 일치로

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

Yup bit late : ( –

+0

설명이없는 원시 코드 –

+0

@RoyalBg가 이제 합류 기반 버전을 제공하기 위해 –

3

blockedmembers 테이블 많은에서

+0

+1을 추가했습니다. 너무 게으르다. – Dave

1

을 항목을 추출 가입 LEFT를 사용할 수 있습니다 아무도 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 
) 
관련 문제