SELECT a.*,
(select count(*) from f4s56_itcs_fields c where c.fid=a.id) nbfields,
(select b.username from f4s56_users b where a.created_by = b.id) username
FROM f4s56_itcs_forms a
where a.created_by=326
or a.group in(2,3,9)
这里,“a.group”可以是2或3或4或2,3,4,5,6等。 均值,组可以是单值或多值。当它是多值时,不检索数据。如何解决这个问题?
答案 0 :(得分:1)
如果我理解正确,f4s56_itcs_forms.group
列(或a.group
别名)是一个字符串类型的列,可以包含单个或多个值:
a.group
-------
1
2
4
2,5
2,3,5,7
如果这是正确的,您将无法直接比较检查“a.group
中的值列表中包含的”值列表“。但是,您可以使用MySQL FIND_IN_SET()
使用a.group
作为您正在查看的集合进行个人值检查。
例如,假设您要在2
中找到值a.group
的所有记录:
...
WHERE
FIND_IN_SET(2, a.`group`) > 0
如果您要检查多个值,则需要分别添加每个值:
...
WHERE
FIND_IN_SET(2, a.`group`) > 0
AND FIND_IN_SET(3, a.`group`) > 0
AND FIND_IN_SET(9, a.`group`) > 0
答案 1 :(得分:0)
我不确定我是否理解您的查询,但请尝试此操作。
SELECT a.*,b.username, count(*) from f4s56_itcs_forms a
INENR JOIN f4s56_users b
on a.created_by = b.id
INNER JOIN f4s56_itcs_fields c
on c.fid=a.id
where a.created_by=326 or a.`group` in(2,3,9)
注意:你认为我认为列group
所以你应该通过像这样的反引号来逃避它
`group`
如果要在一列中存储多个值,则可以执行此操作。
where a.created_by=326 or FIND_IN_SET(2, a.`group`) > 0
or FIND_IN_SET(3, a.`group`) > 0
or FIND_IN_SET(9, a.`group`) > 0
答案 2 :(得分:0)
当它是多值时,不会检索数据。
根据新家庭的回答,您可以使用find_in_set()搜索逗号分隔值。
SQLFiddle: http://sqlfiddle.com/#!2/1f514/1
不幸的是你需要转换:
in(2,3,9)
至
FIND_IN_SET('2', a.'group') > 0 or FIND_IN_SET('3', a.'group') > 0 or FIND_IN_SET('9', a.'group') > 0
导致SQL:
SELECT a.*,
(select count(*) from f4s56_itcs_fields c where c.fid=a.id) nbfields,
(select b.username from f4s56_users b where a.created_by = b.id) username
FROM f4s56_itcs_forms a
where a.created_by=326
or FIND_IN_SET('2', a.`group`) > 0
or FIND_IN_SET('3', a.`group`) > 0
or FIND_IN_SET('9', a.`group`) > 0;
如果不是上述情况,则您的问题可能与数据有关。我已根据您的查询创建了一个测试模式,并返回了结果。
SQLFiddle:http://sqlfiddle.com/#!2/3763b/1
create table f4s56_itcs_fields
(
field_id int,
field_name varchar(20),
fid int
);
create table f4s56_users
(
id int,
username varchar(100)
);
create table f4s56_itcs_forms
(
id int,
created_by int,
`group` int
);
insert into f4s56_users values (326, 'user_326');
insert into f4s56_users values (327, 'user_327');
insert into f4s56_itcs_fields values (1,'name',1);
insert into f4s56_itcs_fields values (2,'last name',1);
insert into f4s56_itcs_fields values (3,'telephone',1);
insert into f4s56_itcs_forms values (1, 326, 2);
insert into f4s56_itcs_forms values (2, 326, 3);
insert into f4s56_itcs_forms values (2, 326, 9);