【发布时间】:2014-11-05 13:56:37
【问题描述】:
我有一个奇怪的问题。 MySQL 数据库上的 IN() 函数停止工作。
我的表结构如下:
| id | name | categories |
---------------------------
| 1 | User1 | 1, 12, 55 |
---------------------------
| 2 | User2 | 12, 55, 76 |
---------------------------
| 3 | User3 | 1, 55, 76 |
要按特定类别列出用户,我大致如下:
SELECT * FROM `users` WHERE `categories` IN ('1','12','55')
或仅来自一个类别:
SELECT * FROM `users` WHERE `categories` IN ('76')
问题是,如果我只询问一个参数,我就得不到任何结果。如果要求更多参数,则仅按列表中的第一个 ID 列出用户,其他不列出。
以前我没有这种问题。我不明白我在哪里犯错误。谢谢!
编辑:
感谢@Andreas Hauser,我终于得到了正确的结果。
这是解决方案:
SELECT * FROM users WHERE FIND_IN_SET ('76',REPLACE(categories,' ',''));
这完全可以正常工作。
其他解决方案非常聪明和有用,我将在未来使用它们,尤其是来自@Justinas 的解决方案和来自@Bilal Rao 的用于搜索类别数组的建议:
SELECT `u`.* FROM `user` `u` JOIN `category` `c` ON `c`.`user_id` = `u`.`id` WHERE `c`.`id` IN ('1', '5', '58');
谢谢大家的帮助!
【问题讨论】:
-
IN()预计您的列categories仅包含一个数字。 -
您需要规范化您的数据库。每个字段应该只包含一条信息,而不是一个列表。
-
我要在数组中搜索指定的ID号,并显示结果。