На данный момент у меня есть 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 или сделать триггер для обновления таблиц (но опять же мне нужно будет менять триггер каждый месяц)?
Часть 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
Других решений пока нет …