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(...

如果我不能user_class在 IN() 运算符中使用,有什么替代方法?

谢谢

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

语法是 expr IN (value,...)

WHERE `user_class` NOT IN ('12')

如果两个或多个表使用相同的列名,则说明不明确,您需要为表添加前缀或昵称,以明确定义您正在调用的列。

WHERE table.column NOT IN ('12')

昵称:

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

value IN (...)检查是否value是 中列出的项目之一(...)。在您的情况下,列表仅包含一个值:user_class列的值。string'12'不等于 string '3,6,9,12',因此找不到匹配项。IN不在列值中搜索匹配的子字符串。

因为您在一个字段中有多个逗号分隔的值,所以您希望使用FIND_IN_SET().


如果您可以选择重组数据,您应该使用数据库规范化来避免在一个字段中有多个值的混乱。

于 2012-06-22T16:45:00.053 回答