2012-02-28 19 views
-1

に参加:アップグレードSQLクエリは、私はこのクエリを持って

SELECT e.id AS event_id, e.title, e.date, e.category, e.place, 
      p.id, p.name, p.coor, p.nz, 
      a.user, a.event, COUNT(a.user) AS attending 
    FROM events AS e 
LEFT JOIN attendance a 
     ON a.event = e.id 
LEFT JOIN places p 
     ON p.id = e.place 
GROUP BY e.id, e.title 
ORDER BY attending DESC 

このクエリは、イベント表からイベントを取得し、他のいくつかのテーブルを結合...(あなたはそれ私はあなたに感謝します、よりefficent作るために私を助けることができる場合)

私はと呼ばれる別のテーブルがあります。invited_friends:

event_id bigint(20)  
user_id int(11) 
owner tinyint(1) 

それはcertienイベントに招待されたユーザーIDを保存する...(所有者は、ユーザーがイベントの作成者である場合に保存ブール値です)

invited_friendsテーブルのデータに基づいて現在のユーザーが招待されている場合のみ選択します。

+0

INNER JOINのは、それが働いたすべてではありませんが、私のイベントは、そのうちのいくつかは、誰にでも公開され、ユーザーを招待しました...それはなりますそれらを無視: 'code'INNERはinvited_friendsのJOIN ON I( i.event_id = e.id ) AND( i.user_id = 1439375286 )' code' – Amir

+0

はどのように公共のイベントは何を知っていますか?それはどこに保存されていますか? – Tobsey

+0

e.category = 4の場合、プライベートイベントです。私のように内部結合を使用している場合、招待されたイベントの横にあるすべてのイベントが無視されます。 – Amir

答えて

0

私は、MySQLとあまり慣れていないんだけど、ここで行く:

SELECT e.id AS event_id, e.title, e.date, e.category, e.place, 
     p.id, p.name, p.coor, p.nz, 
     a.user, a.event, COUNT(a.user) AS 
FROM 
    events AS e 
    LEFT JOIN attendance a ON a.event = e.id 
    LEFT JOIN places p ON p.id = e.place 
WHERE 
    e.Category <> 4 
OR EXISTS (SELECT 
       NULL 
      FROM 
       invited_friends 
      WHERE 
       invited_friends.event_id = e.id 
      AND invited_friends.user_id = @username -- User to search for 
      ) 
GROUP BY 
    e.id, 
    e.title 
ORDER BY 
    attending DESC 
関連する問題