活動表rehearse
id(自增id),name(活動名稱),send_time(開始時間),uid(建立活動的使用者id)…
統計表statis
id(自增id),mtype(活動類型1,2,3;1表示表rehearse內的活動),sid(來源id,活動表的id),pid(人員id),open_time(開啟郵件時間)…
查詢用戶id為6的用戶,建立的活動清單(包含資訊:活動名稱,開始時間,總郵件數,總開啟郵件數)
open_time>0即為開啟郵件的記錄,固定條件mtype =1,sid= 透過uid=6從rehearse查詢到的活動表id。
現在是分開查詢的,然後數組處理。
不知道一條sql怎麼查需要的資料。求大神幫助
高洛峰2017-06-24 09:43:26
SELECT
R.name,
R.send_time,
COUNT(DISTINCT S1.id) send_times,
COUNT(DISTINCT S2.id) open_times
FROM rehearse R
LEFT JOIN
statis S1
ON
R.id = S1.sid AND S1.mtype = 1
LEFT JOIN
statis S2
ON
R.id = S2.sid AND S2.mtype = 1 AND open_time > 0
WHERE
R.uid = 6
GROUP BY
R.id
由於左聯了兩次,可能會有效率問題,在找更優方法
SELECT
R.name,
R.send_time,
COUNT(S.id) send_times,
(SELECT COUNT(S.id) FROM S WHERE AND S.open_time > 0) open_times
FROM
rehearse R
LEFT JOIN
(SELECT * FROM statis WHERE mtype = 1 GROUP BY sid, open_time AND sid = R.id) S