我想执行一个查询,我可以在ID列表中找到一个ID.
表 user
id_user | name | id_site
-------------------------
1 | james | 1, 2, 3
1 | brad | 1, 3
1 | suko | 4, 5
Run Code Online (Sandbox Code Playgroud)
和我的查询(不起作用)
SELECT * FROM `user` WHERE 3 IN (`id_site`)
Run Code Online (Sandbox Code Playgroud)
此查询工作(但不执行此任务)
SELECT * FROM `user` WHERE 3 IN (1, 2, 3, 4, 6)
Run Code Online (Sandbox Code Playgroud)
那不是多么IN有效.我无法解释为什么,只需阅读文档
试试这个:
SELECT * FROM `user` WHERE FIND_IN_SET(3,`id_site`)
Run Code Online (Sandbox Code Playgroud)
注意,这需要你的数据是1,2,3,1,3和4,5(即无空格).如果这不是一个选项,请尝试:
SELECT * FROM `user` WHERE FIND_IN_SET(3,REPLACE(`id_site`,' ',''))
Run Code Online (Sandbox Code Playgroud)
或者,考虑重组数据库.即:
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;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
86 次 |
| 最近记录: |