2012-02-15 174 views
0

我正在嘗試爲用戶邀請參加活動的朋友列表生成一個事件,但只有當他們尚未參加活動或有未決邀請請求時纔可以。使用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處於acceptedInvitesinviteRequest不要選擇值

//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。

+0

您最好提供一些數據並期待結果,以便每個人都能快速查看並提供幫助。 – 2012-02-15 00:46:57

+0

對不起,我不太清楚你的意思。你在問我也列出表格嗎? – user1104854 2012-02-15 00:49:40

+1

編號發佈數據的*樣本*,以及您試圖從您的查詢中獲得的樣本*。正如所寫的,你的SQL絕對沒有意義;你的'LIKE'表達式使用通配符之間的列名作爲* content *,所以除非存儲在'friends.userid2'中的實際值可能類似於'123events.inviterequest456',否則它永遠不會工作(所有東西都將不是「 '它)。 – 2012-02-15 00:57:51

回答

1

我認爲你的意思如下:

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

這將是更好的,但不會是正確的無論是。你如何在你的inviteRequest中分開userIds?假設他們是用逗號分隔的,下面的條件回報false即使用戶ID 3不在名單:

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

明白我的意思?解決這方面的一個技巧是一個逗號添加的inviteRequest兩側,那麼你就必須是這樣的:

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

希望它能幫助!

+0

試過了,但沒有奏效。無論如何感謝 – user1104854 2012-02-15 00:49:54

+0

你有''%events.inviteRequest%''這對我來說沒有意義,因爲你在一個字符串中放置了一個列名。我認爲你至少意味着'%'+ events.inviteRequest +'%'。看到不同? – Diego 2012-02-15 00:56:56

+0

我確實看到你在說什麼並改變了它。仍然沒有運氣。 – user1104854 2012-02-15 01:09:55