繁体   English   中英

使用LIKE和Union的SQL查询

[英]SQL query using LIKE and Union

我正在尝试生成一个供用户邀请参加活动的朋友列表,但是前提是他们尚未参加活动或有待处理的邀请请求。

我的朋友系统的工作方式是,表中有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

因此,这是我无法使用的查询。 如果useridacceptedInvitesinviteRequest不要选择该值

//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中的用户

接受使用的事件表列邀请邀请

(第1行)已接受邀请:“ 1〜2” invitRequests:“”

-userid1和userid2正在参加活动,没有待处理的邀请

基于此,如果userid1要添加更多朋友,则只会显示userid3。

我认为您的意思是:

events.inviteRequest NOT LIKE '%' + friends.userid1 + '%'

这样会更好,但也不正确。 您如何在inviteRequest分隔inviteRequest 假设它们用逗号分隔,即使用户ID 3不在列表中,以下条件也会返回false

'23,35,35' NOT LIKE '%3%'

明白我的意思吗? 解决此问题的技巧是在inviteRequest两侧添加一个逗号,然后您将得到以下内容:

',23,35,35,' NOT LIKE '%,3,%'  -- Note the commas around 3.

希望能帮助到你!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM