2015-09-23 5 views
0

У меня много таблиц на моем сервере, и они имеют имя с датой. Пример e_20150916, e_20150917, e_20150918, e_20150919 ..... и т.д.несколько таблиц объединяются в mysql

Я хочу, чтобы сделать эту таблицу, когда пользователь добавить дату в моем типе входного ..... примера, когда он хочет, чтобы общая сводка между 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 таблиц. Как мне это сделать?

+0

, пожалуйста, сформируйте ваш вопрос. – Noman

+0

В чем проблема? Ваш запрос не работает? Есть ли причина, по которой вы создаете новую таблицу для каждой даты? Вы должны подумать о создании ОДНОЙ таблицы и добавить к ней столбец «date», чтобы вы не делали X 'UNION ALL'. –

+0

@mapek Точная проблема в том, что я хочу суммарное общее количество для 7 таблиц, и я не хочу делать UNION ALL для всех таблиц – tontonlayxx

ответ

0

Как уже указывалось в предыдущих комментариях, не самый умный подход иметь отдельную таблицу для каждой даты, но если это та ситуация, с которой вам нужно жить, вы могли бы по крайней мере сделать все действие UNION ALL в суб-запрос, а затем сделать фактический выбор и SUM -magic с одним WHERE пункта как:

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 
Смежные вопросы