我想从mysql中的三个表中选择三列的总和,然后将其作为php数组。
表:
Amex:
incr_id,check_no, card_no, tip, total, date;
Mc:
incr_id,check_no, card_no, tip, total, date;
Visa
incr_id,check_no, card_no, tip, total,date ;
伪代码:
$query =
select sum(tip) from Amex,
select sum(tip) from Mc,
select sum(tip) from Visa
WHERE DATE(date) = CURDATE()
mysql_fetch_array($query);
然后'foreach'或'while'将三个值输入php数组:
$ccpayments_tip['Amex']
$ccpayments_tip['Mc']
$ccpayments_tip['Visa']
这是可能的,还是我必须执行三个选择查询? 谢谢!
答案 0 :(得分:0)
您可以使用Union查询一次执行所有三个查询,并使用派生字段指示总和来自哪个表:
$sql = <<<EOL
SELECT 'Amex' AS source, SUM(tip) AS sum FROM Amex
UNION
SELECT 'MC' AS source, SUM(tip) AS sum FROM Mc
UNION
SELECT 'Visa' AS source, SUM(tip) AS sum FROM Visa
EOL;
$result = mysql_query($sql) or die(mysql_error());
$ccpayments_tip = array();
while($row = mysql_fetch_assoc($result)) {
$ccpayments_tip[$row['source']] = $row['sum'];
}
当然,为什么你有三个单独的表?如果一个creditcard
表格带有type
字段来表明它是否为签证/ amex / mc,那会不会更有意义?
答案 1 :(得分:0)
您可以执行三个查询中的union。
答案 2 :(得分:0)
你可以试试这样的事情
伪
SELECT A.Amex, M.MC, V.Visa
FROM
(SELECT SUM(tip) AS Amex FROM Amex WHERE DATE(date) = CURDATE()) AS A,
(SELECT SUM(tip) AS Mc FROM Mc WHERE DATE(date) = CURDATE()) AS M,
(SELECT SUM(tip) AS Visa FROM Visa WHERE DATE(date) = CURDATE()) AS V
更新:伪代码
/*
'*CARD TYPES *PREFIX *WIDTH
'American Express 34, 37 15
'Diners Club 300 to 305, 36 14
'Carte Blanche 38 14
'Discover 6011 16
'EnRoute 2014, 2149 15
'JCB 3 16
'JCB 2131, 1800 15
'Master Card 51 to 55 16
'Visa 4 13, 16
*/
SELECT SUM(tip), CASE
WHEN card_no >= 4 AND card_no <= 5 THEN 'visa'
WHEN card_no >= 51 AND card_no <= 56 THEN 'mc'
WHEN card_no >= 34 AND card_no <= 38 THEN 'amex'
ELSE NULL
END AS credit_card_type
FROM Amex, Mc, Visa
WHERE DATE(date) = CURDATE()
GROUP BY CASE
WHEN card_no >= 4 AND card_no <= 5 THEN 'visa'
WHEN card_no >= 51 AND card_no <= 56 THEN 'mc'
WHEN card_no >= 34 AND card_no <= 38 THEN 'amex'
ELSE NULL
END AS credit_card_type
没有测试任何查询只是一个例子,可能在框外思考
您的评论更新:
如果你要移动到交易数据库并存储card_type,你可以使用这样的查询:
SELECT SUM(tip)
FROM transaction_tbl
WHERE DATE(date) = CURDATE()
GROUP BY card_type