如果我无法从mysql中检索值,该怎么办

时间:2013-07-31 10:49:23

标签: php mysql 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 a.group in(2,3,9)

这里,“a.group”可以是2或3或4或2,3,4,5,6等。 均值,组可以是单值或多值。当它是多值时,不检索数据。如何解决这个问题?

3 个答案:

答案 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);