2014-02-19 37 views
0

我一直在尋找這個網站來嘗試和a)更好地理解我的問題和b)找到一些解決方案的幫助,但似乎我看到的一切都是輕微的我的問題,所以我在這裏要問的一些意見不同,請:)sql query在一個查詢中計算多個定義的列數

我有以下查詢

SELECT *, 
(date_end < 1392569012) AS expired, 
(date_start > 1392569012) AS pending, 
(date_end > 1392569012 && date_start <= 1392569012) AS active 
FROM tbl_events AS event 
LEFT JOIN tbl_event_events AS ee ON event.event_id = ee.event_id 
WHERE event.event_type = 5 && event.user_id = '".$user->getUserID()."' 
ORDER BY expired,pending,active 

這determins的列表的狀態。

現在我想做的是統計的活躍人數,待和過期上市

這是我更新的查詢,但它只返回1行,但正確的和值?

SELECT *, 
SUM(date_end < 1392569012) AS expiredCount, 
SUM(date_start > 1392569012) AS pendingCount, 
SUM(date_end > 1392569012 && date_start <= 1392569012) AS activeCount,    
(date_end < 1392569012) AS expired, 
(date_start > 1392569012) AS pending, 
(date_end > 1392569012 && date_start <= 1392569012) AS active 
FROM tbl_events AS event 
LEFT JOIN tbl_job_events AS jobvent ON event.event_id = jobvent.event_id 
LEFT JOIN tbl_job_department AS jdept ON event.event_id = jdept.event_id 
LEFT JOIN tbl_departments as dept ON jdept.department_id = dept.department_id 
WHERE event.event_type = 2 && event.user_id = '".$user->getUserID()."' 
ORDER BY expired,pending,active 

有人可以幫助我得到這個工作,請!

感謝您的幫助

盧克

回答

1

因爲主動將1該過濾器和0他人,加總和有源濾波器獲得的行數滿足該過濾器。

SELECT *, (SELECT SUM(date_end > 1392569012 && date_start <= 1392569012) 
FROM tbl_events AS event 
LEFT JOIN tbl_event_events AS ee ON event.event_id = ee.event_id 
WHERE event.event_type = 5 && event.user_id = '".$user->getUserID()."' 
ORDER BY expired,pending,active), 
(date_end < 1392569012) AS expired, 
(date_start > 1392569012) AS pending, 
(date_end > 1392569012 && date_start <= 1392569012) AS active 
FROM tbl_events AS event 
LEFT JOIN tbl_event_events AS ee ON event.event_id = ee.event_id 
WHERE event.event_type = 5 && event.user_id = '".$user->getUserID()."' 
ORDER BY expired,pending,active 
+0

太棒了!非常感謝 – user2886669

+0

進一步檢查,這只是返回每種類型的上市最多1行?有任何想法嗎?謝謝 – user2886669

+0

你的意思是這個查詢返回1行?或SUM字段返回值1? –