Php 多个表在mysql中合并
我的服务器中有很多表,它们都是带有日期的名称。实例Php 多个表在mysql中合并,php,mysql,Php,Mysql,我的服务器中有很多表,它们都是带有日期的名称。实例 e_20150916,e_20150917,e_20150918,e_20150919 当用户在我的输入类型中添加日期时,我希望执行此表。。。。。例如,他希望在2015/08/1至2015/08/15之间获得总摘要。请帮助我回答这些问题,如何做到这一点 我正在用2台联合收割机进行此操作 这里是我对2个表的查询 SELECT e.cus,e.cusname, e.gid, SUM(total) FROM (
e_20150916
,e_20150917
,e_20150918
,e_20150919
当用户在我的输入类型中添加日期时,我希望执行此表。。。。。例如,他希望在2015/08/1至2015/08/15之间获得总摘要。请帮助我回答这些问题,如何做到这一点
我正在用2台联合收割机进行此操作
这里是我对2个表的查询
SELECT e.cus,e.cusname,
e.gid,
SUM(total)
FROM (
SELECT
e.cus,
e.cusname,
e.gid,
ROUND(SUM(TIMEDIFF(FROM_UNIXTIME(stoptime / 1000),
FROM_UNIXTIME(starttime / 1000))) / 60, 4) as total
FROM
e_cdr_$table
WHERE e.cusname LIKE '%$customername%'
UNION ALL
SELECT
e.cus,
e.cusname,
e.gid,
ROUND(SUM(TIMEDIFF(FROM_UNIXTIME(stoptime / 1000),
FROM_UNIXTIME(starttime / 1000))) / 60, 4) as total
FROM
e_cdr_$table1
WHERE e.cusname LIKE '%$customername%'
) s
我需要对7个表执行此查询。我该怎么做呢?正如前面的评论所指出的,为每个日期设置一个单独的表格并不是最聪明的方法,但如果您需要面对这种情况,您至少可以在子查询中执行所有的
UNION all
操作,然后使用单个WHERE
子句执行实际选择和SUM
-magic,如:
SELECT cus,cusname,gid,
ROUND(SUM(TIMEDIFF(FROM_UNIXTIME(stoptime / 1000),
FROM_UNIXTIME(starttime / 1000))) / 60, 4) as total
FROM (
SELECT * FROM e_20150916 UNION ALL
SELECT * FROM e_20150917 UNION ALL
SELECT * FROM e_20150918 UNION ALL
SELECT * FROM e_20150919 UNION ALL
SELECT * FROM e_20150920 UNION ALL
SELECT * FROM e_20150921 UNION ALL
SELECT * FROM e_20150922 ) tbls
WHERE cusname LIKE '%$customername%'
GROUP BY cus,cusname,gid
我不确定性能问题。如果结果表明您的表太大,那么您当然可以通过执行以下操作来单独限制它们的范围:
SELECT cus,cusname,gid,
ROUND(SUM(TIMEDIFF(FROM_UNIXTIME(stoptime / 1000),
FROM_UNIXTIME(starttime / 1000))) / 60, 4) as total
FROM (
SELECT * FROM e_20150916 WHERE cusname LIKE '%$customername%' UNION ALL
SELECT * FROM e_20150917 WHERE cusname LIKE '%$customername%' UNION ALL
SELECT * FROM e_20150918 WHERE cusname LIKE '%$customername%' UNION ALL
SELECT * FROM e_20150919 WHERE cusname LIKE '%$customername%' UNION ALL
SELECT * FROM e_20150920 WHERE cusname LIKE '%$customername%' UNION ALL
SELECT * FROM e_20150921 WHERE cusname LIKE '%$customername%' UNION ALL
SELECT * FROM e_20150922 WHERE cusname LIKE '%$customername%') tbls
GROUP BY cus,cusname,gid
请形成你的问题。到底是什么问题?您的查询是否无效?是否有为每个日期创建新表的原因?您应该考虑创建一个表,并在其中添加一列
date
,这样您就不应该执行XUNION ALL
s.@mapek确切的问题是我需要7个表的汇总总数,而我不想对所有表执行UNION ALL