1

私はこのmysqlステートメントを持っています:

SELECT  `review_userid` ,  `book_id` ,  `review_id` ,  `user_class` , COUNT( review_id ) 
FROM  `booklist_books` 
LEFT JOIN  `booklist_reviews` ON booklist_books.book_id = booklist_reviews.review_bookid
LEFT JOIN  `e107_user` ON booklist_reviews.review_userid = e107_user.user_id
WHERE '12' NOT IN (`user_class`)
GROUP BY  `review_userid` 
ORDER BY COUNT(`review_id`) DESC 
LIMIT 0 , 100

user_class以下に示すように、カンマ区切りの文字列 (例: 1,2,3,4,5) です。

phpmyadmin を使用すると、次の結果が得られます。

mysqlの結果

を使用しているのに、user_class フィールドに「12」が含まれる結果が得られるのはなぜ'12' NOT IN(... ですか??

IN() 演算子を使用できない場合user_class、これに代わるものは何ですか?

ありがとう

4

3 に答える 3

3

INまたはNOT INそのように機能していない場合は、関数FIND_IN_SETを確認してください

WHERE FIND_IN_SET('12', `user_class`) = 0
于 2012-06-22T16:44:23.657 に答える
1

構文はexprIN(value、...)です

WHERE `user_class` NOT IN ('12')

2つ以上のテーブルが同じ列名を使用している場合、それはあいまいであり、呼び出す列を明確に定義するために、テーブルに接頭辞またはニックネームを付ける必要があります。

WHERE table.column NOT IN ('12')

ニックネーム:

SELECT table a, table2 b
于 2012-06-22T16:44:08.977 に答える
1

value IN (...)valueにリストされているアイテムの1つであるかどうかを確認します(...)user_classあなたの場合、リストには列の値という1つの値しか含まれていません。文字列'12'は文字列と等しくない'3,6,9,12'ため、一致するものは見つかりません。IN列の値で一致するサブ文字列を検索していません。

1つのフィールドに複数のコンマ区切り値があるため、を使用する必要がありますFIND_IN_SET()


データを再構築するオプションがある場合は、データベースの正規化を使用して、1つのフィールドに複数の値が含まれるというこの混乱を回避する必要があります。

于 2012-06-22T16:45:00.053 に答える