[英]combining two tables query
我遇到了以下問題
我想在這兩個代碼中使用 mysql 來總結有人缺席
SELECT a.nama_account,
a.jabatan,
b.nama_tp,
a.jam_berangkat,
a.jam_pulang,
(SUM(IF((jam_awal < jam_berangkat) AND (jam_akhir > jam_pulang),'1','0'))+dinas+dinastp) jum,
DATEDIFF('$tgl2','$tgl1')+1 jumhar
FROM t_account a
LEFT JOIN t_tp b ON a.tp_ID=b.ID
LEFT JOIN t_user c ON a.userCode=c.userCode
LEFT JOIN (
SELECT DATE(`tanggal`) tgl,
phoneNumber,
MIN(TIME( tanggal)) jam_awal,
MAX(TIME( tanggal)) jam_akhir,
SUM(IF(saran = '1234','1','0')) dinas,
SUM(IF(saran = '4321','1','0')) dinastp
FROM t_report
WHERE ( tanggal BETWEEN '$tgl1 00:00:00' AND '$tgl2 23:59:59' )
GROUP BY DATE(tanggal),phoneNumber
) tlis
ON tlis.phoneNumber = a.`imei_number`
WHERE a.grup_ID = '$grup'
$queryIf
AND (c.user_status !='3' AND c.user_status != '999')
GROUP BY a.`imei_number`
ORDER BY b.nama_tp,a.jabatan
和
SELECT a.nama_account,
a.jabatan,
b.nama_tp,
a.jam_berangkat,
a.jam_pulang,
(SUM(IF((jam_awal < jam_berangkat) AND (jam_akhir > '$jampulang_sabtu'),'1','0'))+dinas+dinastp) jum,
DATEDIFF('$tgl2','$tgl1')+1 jumhar
FROM t_account a
LEFT JOIN t_tp b ON a.tp_ID=b.ID
LEFT JOIN t_user c ON a.userCode=c.userCode
LEFT JOIN (
SELECT DATE(`tanggal`) tgl,
phoneNumber,
MIN(TIME( tanggal)) jam_awal,
MAX(TIME( tanggal)) jam_akhir,
SUM(IF(saran = '1234','1','0')) dinas,
SUM(IF(saran = '4321','1','0')) dinastp
FROM t_report
WHERE ( tanggal BETWEEN '$tgl1 00:00:00' AND '$tgl2 23:59:59') AND DAYNAME(tanggal)='Saturday'
GROUP BY DATE(tanggal),phoneNumber
) tlis
ON tlis.phoneNumber = a.`imei_number`
WHERE a.grup_ID = '$grup'
$queryIf
AND (c.user_status !='3' AND c.user_status != '999')
GROUP BY a.`imei_number`
ORDER BY b.nama_tp,a.jabatan
我想在每個查詢中獲得 jum 的組合數,我可以用 1 個查詢來代替這兩個嗎? 因為在 php echo 上循環它很麻煩。
謝謝
@StevenC。 聽起來您需要使用UNION
將 2 個查詢的結果放在一起。
以下是您的操作方法:
SELECT nama_account,
jabatan,
nama_tp,
jam_berangkat,
jam_pulang,
jumhar,
SUM(jum) AS jumTotal
FROM (
SELECT a.nama_account,
a.jabatan,
b.nama_tp,
a.jam_berangkat,
a.jam_pulang,
(SUM(IF((jam_awal < jam_berangkat) AND (jam_akhir > jam_pulang),'1','0'))+dinas+dinastp) jum,
DATEDIFF('$tgl2','$tgl1')+1 jumhar
FROM t_account a
LEFT JOIN t_tp b ON a.tp_ID=b.ID
LEFT JOIN t_user c ON a.userCode=c.userCode
LEFT JOIN (
SELECT DATE(`tanggal`) tgl,
phoneNumber,
MIN(TIME( tanggal)) jam_awal,
MAX(TIME( tanggal)) jam_akhir,
SUM(IF(saran = '1234','1','0')) dinas,
SUM(IF(saran = '4321','1','0')) dinastp
FROM t_report
WHERE ( tanggal BETWEEN '$tgl1 00:00:00' AND '$tgl2 23:59:59' )
GROUP BY DATE(tanggal),phoneNumber
) tlis
ON tlis.phoneNumber = a.`imei_number`
WHERE a.grup_ID = '$grup'
$queryIf
AND (c.user_status !='3' AND c.user_status != '999')
GROUP BY a.`imei_number`
ORDER BY b.nama_tp,a.jabatan
UNION
SELECT a.nama_account,
a.jabatan,
b.nama_tp,
a.jam_berangkat,
a.jam_pulang,
(SUM(IF((jam_awal < jam_berangkat) AND (jam_akhir > '$jampulang_sabtu'),'1','0'))+dinas+dinastp) jum,
DATEDIFF('$tgl2','$tgl1')+1 jumhar
FROM t_account a
LEFT JOIN t_tp b ON a.tp_ID=b.ID
LEFT JOIN t_user c ON a.userCode=c.userCode
LEFT JOIN (
SELECT DATE(`tanggal`) tgl,
phoneNumber,
MIN(TIME( tanggal)) jam_awal,
MAX(TIME( tanggal)) jam_akhir,
SUM(IF(saran = '1234','1','0')) dinas,
SUM(IF(saran = '4321','1','0')) dinastp
FROM t_report
WHERE ( tanggal BETWEEN '$tgl1 00:00:00' AND '$tgl2 23:59:59') AND DAYNAME(tanggal)='Saturday'
GROUP BY DATE(tanggal),phoneNumber
) tlis
ON tlis.phoneNumber = a.`imei_number`
WHERE a.grup_ID = '$grup'
$queryIf
AND (c.user_status !='3' AND c.user_status != '999')
GROUP BY a.`imei_number`
ORDER BY b.nama_tp,a.jabatan
) AS derivedTable
GROUP BY nama_account,
jabatan,
nama_tp,
jam_berangkat,
jam_pulang,
jumhar;
你去吧:來自 2 個查詢的jum
值的總和。
希望這可以幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.