2014-06-30 44 views
0

我嘗試了很多方法來處理這個問題,到目前爲止都失敗了。不確定如何在選定的範圍內執行計數

我有3張桌子。包含所有帳戶信息的用戶表。一個包含未來促銷活動詳細信息的活動表,以及一個列表表,其中包含所有受邀參加活動的人員以及他們的活動狀態。

這是我當前的查詢:

SELECT u.Name, l.*, e.* 
FROM event e, user u, list l 
WHERE e.event_id IN (SELECT l.event_id 
        FROM list l, event e, user u 
        WHERE e.event_id=l.event_id 
        AND l.user_id=1) 
AND u.user_id=e.creator_id 
AND l.event_id IN (SELECT l.event_id 
        FROM list l 
        WHERE l.user_id=1 
        AND l.event_id=e.event_id) 
AND l.user_id=1 ORDER BY e.creationDate DESC 

我想添加一個簡單的計數到它使「走出去」則返回一個新列,這會計算所有被邀請的人誰:

| User_ID | Name | Event_ID | Event_Name | Date | List_ID | Accepted | Going | 
|---------|------|----------|------------|------|---------|----------|-------| 

添加一個簡單的計數到我的查詢帶回的錯誤「命令不同步,你現在不能運行此命令」:

SELECT u.Name, l.*, e.*, (SELECT l.user_id, COUNT(*) as count 
          FROM list l 
          GROUP BY l.user_id 
          ORDER BY count DESC) as Going) 
FROM event e, user u, list l 
WHERE e.event_id IN (SELECT l.event_id 
        FROM list l, event e, user u 
        WHERE e.event_id=l.event_id 
        AND l.user_id=1) 
AND u.user_id=e.creator_id 
AND l.event_id IN (SELECT l.event_id 
        FROM list l 
        WHERE l.user_id=1 
        AND l.event_id=e.event_id) 
AND l.user_id=1 ORDER BY e.creationDate DESC 

我讀過它,它似乎是調用函數的順序問題。我不確定如何構建它,因爲計數似乎在正確的位置。

+0

我還沒有看到這個問題,但我會做的第一件事是打破這個,所以我把臨時表放在一起,並得到查詢與這些工作。然後,如果你願意,你可以重新合併報表。 –

回答

0

你想要一個相關子查詢,而不是一個group by

SELECT u.Name, l.*, e.*, (SELECT l.user_id, COUNT(*) as count 
          FROM list l2 
          WHERE l2.user_id = l.user_id 
         ) as Going 

我不知道什麼count(*)子查詢在做什麼。另外,您應該學會使用恰當的顯式join語法,而不是隱式連接,這些連接不那麼強大,更容易出錯並且難以閱讀。