下面是表格结构(邀请表):-
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