我正在嘗試爲用戶邀請參加活動的朋友列表生成一個事件,但只有當他們尚未參加活動或有未決邀請請求時纔可以。使用LIKE和Union進行SQL查詢
我的朋友系統工作的方式,表中有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
例如:
朋友表 列是朋友1,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。
您最好提供一些數據並期待結果,以便每個人都能快速查看並提供幫助。 – 2012-02-15 00:46:57
對不起,我不太清楚你的意思。你在問我也列出表格嗎? – user1104854 2012-02-15 00:49:40
編號發佈數據的*樣本*,以及您試圖從您的查詢中獲得的樣本*。正如所寫的,你的SQL絕對沒有意義;你的'LIKE'表達式使用通配符之間的列名作爲* content *,所以除非存儲在'friends.userid2'中的實際值可能類似於'123events.inviterequest456',否則它永遠不會工作(所有東西都將不是「 '它)。 – 2012-02-15 00:57:51