[英]Mysql query “WHERE 2 IN (`column`)” not working
我想执行一个查询,在此我可以在ID列表中找到一个ID。
表user
id_user | name | id_site
-------------------------
1 | james | 1, 2, 3
1 | brad | 1, 3
1 | suko | 4, 5
和我的查询(无效)
SELECT * FROM `user` WHERE 3 IN (`id_site`)
该查询有效(但不起作用)
SELECT * FROM `user` WHERE 3 IN (1, 2, 3, 4, 6)
那不是IN
工作方式。 我不介意解释原因,只需阅读文档
尝试这个:
SELECT * FROM `user` WHERE FIND_IN_SET(3,`id_site`)
注意,这需要你的数据是1,2,3
, 1,3
和4,5
(即无空格)。 如果这不是一种选择,请尝试:
SELECT * FROM `user` WHERE FIND_IN_SET(3,REPLACE(`id_site`,' ',''))
或者,考虑重组数据库。 即:
CREATE TABLE `user_site_links` (
`id_user` INT UNSIGNED NOT NULL,
`id_site` INT UNSIGNED NOT NULL,
PRIMARY KEY (`user_id`,`site_id`)
);
INSERT INTO `user_site_links` VALUES
(1,1), (1,2), (1,3),
(2,1), (2,3),
(3,4), (3,5);
SELECT * FROM `user` JOIN `user_site_links` USING (`id_user`) WHERE `id_site` = 3;
试试这个: FIND_IN_SET(str,strlist)
没有! 对于关系数据库
您的表不能满足数据库的第一个范式 ( “每个属性仅包含原子值,并且每个属性的值仅包含来自该域的单个值” ),您将:
要使用这样的字段,您将必须使用FIND_IN_SET()
或存储数据,1,2,3,
(请注意开头和结尾处的冒号,分号或其他分隔符),并使用LIKE "%,7,%"
在任何情况下工作。 这样就不可能使用索引 [1] [2] 。
CREATE TABLE user_on_sites(
user_id INT,
site_id INT,
PRIMARY KEY (user_id, site_id),
INDEX (user_id),
INDEX (site_id)
);
并加入表格 :
SELECT u.id, u.name, uos.site_id
FROM user_on_sites AS uos
INNER JOIN user AS u ON uos.user_id = user.id
WHERE uos.site_id = 3;
问题是您正在几个列表中搜索。
您需要更多类似的东西:
SELECT * FROM `user` WHERE id_site LIKE '%3%';
但是,这还将选择33、333和345,因此您需要一些更高级的文本解析。
WHERE IN子句可用于替换许多OR条件。 举个例子
SELECT * FROM `user` WHERE id IN (1,2,3,4)
比...干净
SELECT * FROM `user` WHERE id=1 OR id=2 OR id=3 OR id=4
您只是想以错误的方式使用它。
正确方法:
WHERE `field` IN (list_item1, list_item2 [, list_itemX])
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.