2011-12-06 21 views
0

私はブール値を返すためにテーブルを照会しようとしていますが、これは一度だけnullを返すようです。なぜこのmysqlクエリはnullだけを返しますか?

$sTable4

userid & artistid

$artistidから構成は、(確かに正しく渡されている)スクリプト

$useridに渡されたパラメータは、現在ログインしているユーザーのIDです。

ユーザーはアーティストをfavouritesリストに保存できます。

私が望むのは、現在ログインしているユーザーと、上記の変数で宣言されているエントリが存在するかどうかを確認する特定のアーティストIDのこのテーブルを確認することです。もしそうでなければ、nullを返し、それがあれば '1'を返すようにします。

私は間違っていますか?

SELECT userid, artistid 
FROM $sTable4 AS b 
WHERE NOT EXISTS 
(
    SELECT artistid 
    FROM $sTable4 AS ab 
    WHERE b.userid = $userid 
     AND b.artistid = $artistid 
) 

答えて

1

間違って何も、実際にはそうでない$sTable4からuserid, artistidを選択しようとしているので、あなたが何を期待するか、彼らが存在しない場合どのようにあなたがそれらを選択することになり、同じテーブルに存在します?!私はあなたがあなたの質問に何かを見逃していると思います。なぜなら、このチェックはそれらが存在するときに常にnullを返すので、それらは選択されないからです。だから私はwhere existsあなたのためにこのように動作すると思います:

SELECT ab.artistid 
FROM $sTable4 AS ab 
WHERE exists 
(
    select artistid 
    from $sTable4 b 
    where b.userid=$userid AND b.artistid=$artistid 
) 
+0

ああああ。それは私がしなければならなかったのは 'NOT'を取り除き、EXISTS functinを使うことだけだったようです。今は完璧に動作します。それは私が単に2つの機能を混乱させていたようだ...どのように恥ずかしい!とにかくMGAありがとうございました。 :) – gordyr

関連する問題