单个查询中的两个FIND_IN_SET不起作用


Two FIND_IN_SET in a single query is not working

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

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_invitation将是null,分隔的id值)。

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

注意:我直接在PHPMyAdmin中使用这些查询

使用 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

你应该使用这个

将"= 0"替换为"为空"

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

若要检查方案,请使用

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