单个查询中的两个FIND_IN_SET无效

时间:2016-07-07 05:06:27

标签: php mysql

下面是表格结构(邀请表): -

id   user_id   doc_name        discussion_topic     invited_friends  accepted_invitation 

1     1        IEP Form-1.docx   first topic        2,3,4             NULL

现在:

当我查询时: -

SELECT * from invite WHERE  (FIND_IN_SET(2,invited_friends) > 0)

我完美地记录了这个记录(如上所示)。

但是当我这样做的时候:

SELECT * from invite WHERE  (FIND_IN_SET(2,invited_friends) > 0) AND (FIND_IN_SET(2,accepted_invitation) =0)

我没有得到上述记录,也没有任何错误。

当我这样做的时候:

SELECT * from invite WHERE user_id <>1 AND (FIND_IN_SET(2,invited_friends) > 0) AND (FIND_IN_SET(2,accepted_invitation) =0)

我再次没有得到上述记录,也没有任何错误。

实际上我需要检查一个给定的id(例2)不等于user_id并且必须在invite_friends中(永远不为空)而不是在accepted_invitation accepted_invitationnull,分隔的ID值。)

我在最后两次查询中犯了什么错误?

注意:我在phpmyadmin

中直接使用这些查询

3 个答案:

答案 0 :(得分:2)

你应该使用这个

将'= 0'替换为'is null'

SELECT * from invite WHERE  (FIND_IN_SET(2,invited_friends) > 0) AND (FIND_IN_SET(2,accepted_invitation) is null )

答案 1 :(得分:2)

使用IFNULL作为列名:

SELECT * 
FROM   invite 
WHERE  user_id <> 1 AND
      (FIND_IN_SET(2, IFNULL(invited_friends, 0)) > 0)  AND 
      (FIND_IN_SET(2, IFNULL(accepted_invitation, 0)) = 0);

检查SQL小提琴:http://sqlfiddle.com/#!9/98d95/9

答案 2 :(得分:2)

要检查您的方案使用

SELECT * from invite WHERE user_id <>2// check user ID not equal to 2
AND (FIND_IN_SET(2, invited_friends) > 0)// 2 present in invited_friends
AND ((FIND_IN_SET(2, accepted_invitation) = 0)|| (FIND_IN_SET(2, accepted_invitation) IS NULL))// check 2 is null and not present in accepted_invitation