2012-02-15 7 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 

は私がfriendIDとしてユーザーIDを設定しますもっと友達を追加するには、私は友人を引っ張る方法が必要ですが、それらの友人が出席していない、または保留中のリクエストを持っている場合のみです。 参加するユーザーのイベントテーブルの列はacceptedInvites、保留中の要求の列はinviteRequestです。

ここでは私が仕事に出られない質問があります。

友人テーブル 列がfriend1あり、friend2とfriendstatus

(行1)USERID1:useridacceptedInvites又は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 userid2:userid2 friendstatus:1

(2行目)userid1:3 userid2:1 friendstatus:1

-userid1は、userid1とuserid3の友人です。 "1〜2" inviteRequests: ""

-userid1とuserid2 Iが上述したように、USERID1

イベントテーブル内のユーザが使用 カラムはacceptedInvitesのinviteRequests

(行1)acceptedInvitesあります出席している招待状はありません

これに基づいて、userid1がさらに多くの友人を追加したい場合、userid3だけが表示されます。

+0

データを提供して結果を期待すると、皆が素早く見て助けてくれます。 –

+0

申し訳ありませんが、私はあなたが何を意味するのかよく分かりません。あなたは私にテーブルのリストも尋ねていますか? – user1104854

+1

いいえデータのa *サンプル*と、あなたのクエリで取得しようとしているものの*サンプル*を投稿してください。書かれているように、あなたのSQLはまったく無意味です。あなたの 'LIKE'式は、* content *としてワイルドカード間のカラム名を使用しているので、' friends.userid2'に格納されている実際の値が '123events.inviterequest456'のようなものでなければ、決してうまくいかないでしょうそれ)。 –

答えて

1

私はあなたが次のことを意味だと思う:

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

これは良いだろうが、どちらか正しくないだろう。 inviteRequestでどのようにユーザーIDを分離していますか?

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

は私のポイントを参照してください:ユーザーID 3がリストにない場合でも、彼らはカンマで区切られていると仮定すると、以下の条件がfalseを返しますか?この問題を解決するためのトリックは、あなたのようなものがあるでしょう、inviteRequestの両側にカンマを追加することです:

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

それが役に立てば幸い!

+0

試しましたが、動作しませんでした。とにかくありがとうございます – user1104854

+0

文字列の中に列の名前を置いているので、あなたには意味をなさない ''%events.inviteRequest% ''があります。少なくともあなたは% '+ events.inviteRequest +'% 'を意味すると思います。違いを見ます? – Diego

+0

私はあなたが言っていることを見て、それを変更しました。まだ運がありません。 – user1104854

関連する問題