2011-09-10 3 views
0

phpbb3 karma modに追加のクエリーを書いて、3人の他の人にカルマを与えていないうちに同じ人にカルマを与えることができないことをチェックします。しかし、私はエラーを出すMySQL "NOT IN"/"LEFT JOIN"

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) 

に従ってくださいだから私の内側のクエリは3最後の人(poster_idを取得するよう、私はルックスを書いている私はthisthisリンクとクエリを確認...私のSQL構文で

をエラーを受信して​​い)彼(user_id)がカルマを与えた。このクエリだけで動作しますが、私の外部クエリと一緒にエラーが発生します。

1064 - SQL構文に誤りがあります。右の構文を使用するため は、MySQLサーバのバージョンに対応していること取扱説明書を確認し 近い「アウトWHERE out.poster_id = 134 AND IN( k.karma_id、区を選択しないout.poster_id」行2で

私の外側のクエリでは、カルマを受け取る人は134であり、内側のクエリ結果には存在してはいけないと書いています。

本当に2番目の行にエラーがありますか?

LEFT JOINと同じクエリを書きましたが、構文エラー

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構文でエラーが発生しています。 が近く を使用する権利構文についてはMySQLサーバのバージョンに対応していること取扱説明書を確認し「左からphpbb_karmaのJOIN ASでON in.poster_id = out.poster_id WHERE in.poster_」行で2

のMySQLバージョンはMySQL client version: mysqlnd 5.0.7-dev - 091210 - $Revision: 304625 $ですが、LEFT JOINはどちらも動作しないため、問題はバージョンにあるとは思わない

答えて

0

outはMySQLのキーワードです。エイリアスに何か他の名前をつけたり、outの前後にバッククォートを入れたりすることで、これを修正できます。

+0

別名「in」 –

0

outinの前後にバックティックを入れてください。それらが予約されているようなキーワードは、MySQLに見えます

1

を離れて戻っていることをあなたは、サブ選択してNOT INまたはINを使用することはできませんエイリアスとして予約語を使用してから、複数の列。

基本的には、MySQLにposter_idの単一の値と3つの異なる値を比較するように指示しています。今はどちらを取るべきですか?

エイリアスがソートされた状態で問題が発生したら、サブセレクトから2つの列を削除する必要があります。

あなたの名前付けスキーマに基づいて、私はあなたが実際に代わり

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

をしたいと仮定します。

+0

ありがとう、それはnows :) – Skyzer

+0

uhh、5分で編集しなかったので、私は私の内側のクエリでLIMIT 3を省略すると返信として書くそうでなければこのバージョンのMySQLはないまだ 'LIMIT & IN/ALL/ANY/SOMEサブクエリ'をサポートしています – Skyzer