Mysql выбрать из нескольких таблиц и новая таблица создается каждый месяц

На данный момент у меня есть 3 таблицы: cdr, cdr_201502 и cdr_201503, в следующем месяце система создаст новую cdr_201504 и так далее. Я делаю страницу php, чтобы выбрать из базы данных некоторую информацию, и мне нужно выбрать из всех таблиц, и мне нужно автоматизировать эту вещь, я могу использовать объединение выбора или внутреннее объединение, но каждый месяц мне нужно писать новый выбор объединения для вновь созданная таблица … таблица имеет одинаковые столбцы. Пожалуйста, помогите, у меня уже есть google’d все страницы, но не могу найти какие-либо, связанные с моей потребностью.

Я не могу поставить весь код здесь, но я могу привести пример:

select * from cdr where src='470' and calltype like '%'
and billable>'-1'  and datetime>'2015-01-01 00:00:00' and datetime
<'2015-  03-30     23:59:59' order by datetime desc
union all
select * from cdr_201502 where src='470' and calltype like '%'
and billable>'-1'  and datetime>'2015-01-01 00:00:00' and datetime
<'2015-  03-30     23:59:59' order by datetime desc
union all
select * from cdr_201503 where src='470' and calltype like '%'
and billable>'-1'  and datetime>'2015-01-01 00:00:00' and datetime
<'2015-  03-30     23:59:59' order by datetime desc;

в следующем месяце мне нужно будет добавить новый союз, так как это автоматизировать?

Вопрос: можно использовать запрос для выбора таблиц из INFORMATION_SCHEMA
и затем использовать select или сделать триггер для обновления таблиц (но опять же мне нужно будет менять триггер каждый месяц)?

0

Решение

Часть 1: могу ли я использовать запрос, чтобы выбрать таблицы из information_schema, а затем использовать select

Мы можем использовать запрос, чтобы взять имена таблиц из information_schema

 SELECT table_name FROM information_schema.tables
WHERE table_type = 'BASE TABLE'
AND table_schema = 'database-name'
AND table_name like 'cdr%';

Мы также можем создать небольшой динамический запрос, если мы следуем шаблону при создании имени таблицы, мы можем взять имя таблицы в переменной, такой как $ cdr, на основе отметки даты и времени, и использовать его в нашем запросе, увеличивая значение $ cdr в петля

select * from '".$cdr." ' where src='470' and calltype like '%'

Часть 2. Выбор столбцов из нескольких таблиц, имеющих одинаковую структуру

Использование UNION

(select * from cdr where src='470' and calltype like '%' )
UNION
(select * from cdr_201502 where src='470' and calltype like '%' );

Использование ALIAS

SELECT cdr.id, cdr.name, cdr_201502.id
FROM cdr
INNER JOIN cdr_201502 on cdr.id = cdr_201502.id
0

Другие решения

Других решений пока нет …