此刻我有3个表:cdr,cdr_201502和cdr_201503,下个月系统会创建一个新的cdr_201504,依此类推。我正在做一个php页面从数据库中选择一些信息,我需要从所有表中选择,我需要自动化这个东西,我可以使用联合选择或内部联接,但每个月我需要为新写一个新的联合选择创建的表...表具有相同的列。请帮助我已经谷歌所有页面,但无法找到任何与我的需求相关。
我不能把所有代码放在这里,但我可举个例子:
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 :(得分:0)
第1部分:我可以使用查询从information_schema中选择表格,然后使用选择
我们可以使用query来从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