Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 多个表在mysql中合并_Php_Mysql - Fatal编程技术网

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
,这样您就不应该执行X
UNION ALL
s.@mapek确切的问题是我需要7个表的汇总总数,而我不想对所有表执行UNION ALL