2011-09-10 3 views
0

phpbb3 karma mod에 추가 쿼리를 써서 사용자가 3 명의 다른 사용자에게 업보를 부여하지 않으려면 동일한 사용자에게 업보를 줄 수 없음을 확인하고 싶습니다. 그러나 (poster_idMySQL에 "NOT IN"/ "LEFT JOIN"에러가 발생했습니다

... 내 SQL 구문에 오류가 발생하고있어 나는 그래서 내 내부 쿼리가 3 마지막 사람을 얻을 수

SELECT * 
FROM phpbb_karma AS out 
WHERE out.poster_id = 134 
AND out.poster_id 
NOT IN 
(SELECT k.karma_id, k.user_id, k.poster_id 
FROM phpbb_karma AS k 
WHERE user_id = 108 
ORDER BY k.karma_id DESC LIMIT 3) 

을 따를 thisthis 링크 및 쿼리 내가 외모를 작성했습니다 확인) 누구 (user_id)가 업을했다. 이 쿼리 만 작동하지만 내 외부 쿼리와 함께 오류가 발생합니다.

1064 - SQL 구문에 오류가 있습니다. 올바른 구문을 사용하는 는 MySQL 서버 버전에 해당하는 설명서를 확인 근처 '밖으로 WHERE out.poster_id = 134 AND IN ( k.karma_id, 구를 선택하지 out.poster_id'라인 2에서

내 외부 쿼리에서 카르마를받을 사람은 134이고 내 쿼리 결과에 나타나서는 안됨을 써주십시오.

오류가 실제로 두 번째 행에 있습니까?

LEFT JOIN을 사용하여 동일한 쿼리를 작성했지만 나에게도 마찬가지입니다. 구문 오류

1064

SELECT * 
FROM phpbb_karma AS out 
LEFT JOIN phpbb_karma AS in 
ON in.poster_id = out.poster_id 
WHERE in.poster_id = 134 AND in.poster_id IS NULL 
- 당신은 당신의 SQL 구문에 오류가 있습니다; 올바른 구문 라인에서 2

MySQL의 'phpbb_karma AS에 ON in.poster_id = out.poster_id WHERE in.poster_ 가입 왼쪽에서'근처 를 사용하는 는 MySQL 서버 버전에 해당하는 설명서를 확인 버전은 MySQL client version: mysqlnd 5.0.7-dev - 091210 - $Revision: 304625 $이지만 LEFT JOIN이 작동하지 않으므로 버전에 문제가 있다고 생각하지 않습니다.

답변

1

를 사용하여 다른 별명에 키워드를 예약되어 같은 out는 예약 키워드이기 때문에, 보이는 둘 이상의 열.

기본적으로 MySQL에게 poster_id의 단일 값과 세 가지 다른 값을 비교하도록 알려줍니다. 이제 어느 것이 걸릴까요?

별칭이 정렬 된 상태에서 문제가 발생하면 하위 선택에서 두 개의 열을 제거해야합니다.당신의 명명 스키마를 기반으로

나는 당신이 실제로 대신

NOT IN (SELECT k.karma_id FROM phpbb_karma ....) 

원하는 가정합니다.

+0

와 같이 부탁드립니다. 내가 처음 대답을 수락했다. – Skyzer

0

out은 MySQL의 키워드입니다. 별칭을 다른 이름으로 지정하거나 out 주위에 역 따옴표를 붙여서이 문제를 해결할 수 있습니다.

+0

별칭은 'in' –

1

: 그들은 MySQL의

+0

고맙다, 그것들은 아무 것도하지 않는다. :) – Skyzer

+0

어, 5 분 안에 편집하지 않았다. 회신으로 작성하면 내 내부 쿼리에서 LIMIT 3을 생략 할 때 작동한다. 그렇지 않으면이 버전의 MySQL은 그렇지 않다. 아직 'LIMIT & IN/ALL/ANY/SOME 하위 쿼리'를 지원합니다. – Skyzer