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