我正在尝试生成一个朋友列表,供用户邀请参加某个活动,但前提是他们尚未参加活动或有待处理的邀请请求。
我朋友系统的工作方式,表格中有3列。 userid1,userid2和friendstatus。发送请求的用户进入第1列(userid1
),收到请求的用户进入第2列(userid2
)。由于创建事件的用户可以在任一列中,因此在向事件添加朋友时使用以下查询。
//this block is finding friends from column1
SELECT userid1 as friendID
FROM friends
WHERE userid2 = $myUsername AND friendstatus = 1
UNION
// this section is finding friends from column 2
SELECT userid2 as friendId
FROM friends
WHERE userid1 = $myUsername AND friendstatus = 1
我将userid设置为friendID,因为此查询会生成一个列表,然后我使用复选框(其值由中确定)
然而,一旦创建了活动,如果参加活动的用户想要添加更多朋友,我需要一种方式来吸引他们的朋友,但前提是这些朋友没有参加或有待处理的请求。
我的事件表中供参加的用户的列称为acceptedInvites
,待处理请求的列位于inviteRequest
。
所以,这是我无法开始工作的查询。如果userid
位于acceptedInvites
或inviteRequest
,请勿选择该值
//this section is finding friends from column1
SELECT
events.inviteRequest,
events.acceptedInvites,
friends.userid1 as friendID
FROM friends
LEFT JOIN events on
friends.userid1 NOT LIKE '%events.inviteRequest%' AND
friends.userid1 NOT LIKE '%events.acceptedInvites%'
WHERE friends.userid2 = $userid AND friends.friendstatus = 1
UNION
//this section is finding friends from column 2
SELECT users.userid2 as friendId
FROM friends
LEFT JOIN events on
friends.userid2 NOT LIKE '%events.inviteRequest%' AND
friends.userid2 NOT LIKE '%events.acceptedInvites%'
WHERE friends.userid1 = $userid AND friends.friendstatus = 1
例如:
朋友表 列是friend1,friend2和friendstatus
(第1行)userid1:1 userid2:userid2 friendstatus:1
(第2行)userid1:3 userid2:1 friendstatus:1
-userid1是userid1和userid3的朋友。如上所述,userid1中的用户
活动表 使用的列是acceptedInvites inviteRequests
(第1行)acceptedInvites:“1~2”inviteRequests:“”
-userid1和userid2正在参加活动,没有待处理的邀请
基于此,如果userid1想要添加更多朋友,则只显示userid3。
答案 0 :(得分:1)
我认为你的意思如下:
events.inviteRequest NOT LIKE '%' + friends.userid1 + '%'
这会更好,但也不正确。你如何分离inviteRequest
中的userIds?假设它们以逗号分隔,即使用户ID 3不在列表中,以下条件也会返回false
:
'23,35,35' NOT LIKE '%3%'
看到我的观点?解决这个问题的一个技巧是在inviteRequest
的两边添加一个逗号,然后你会有类似的东西:
',23,35,35,' NOT LIKE '%,3,%' -- Note the commas around 3.
希望它有所帮助!