2012-02-28 93 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 

這個查詢得到事件表事件,並加入一些其他表...(如果你能幫助我,使之比較有效,我會感謝你)

我叫另一個表:invited_friends:

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

它存儲邀請了certien事件。該用戶ID(所有者是存儲,如果用戶是事件的創建者布爾)

我想僅在邀請當前用戶時根據invite_friends表中的數據進行選擇。

+0

INNER JOIN,它的工作,但不是所有的事件邀請的用戶,他們中的一些公開給大家...所以它會無視他們:'code'INNER JOIN invited_friends我ON( i.event_id = e.id ) AND( i.user_id = 1439375286 )'code' – Amir 2012-02-28 18:32:12

+0

你怎麼知道什麼事件是公開的嗎?存儲在哪裏? – Tobsey 2012-02-28 18:37:55

+0

如果e.category = 4,那麼它是一個私人事件,當我使用內部連接像我顯示它只是忽略旁邊的邀請朋友的每個事件。 – Amir 2012-02-28 18:40:26

回答

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