我有一个这种类型的表数组:
$tables = "`01_12_2014`,`02_02_2015`,`02_03_2015`,`03_08_2015`,`04_05_2015`,`05_01_2015`,`06_04_2015`,`06_07_2015`,`07_09_2015`";
它们都具有相同的结构。
如何获取每个表的值,一个查询到数据库
这不起作用(字段列表中的错误列'informer'不明确):
$tables_query = "SELECT `informer`, `count`, `site` FROM `$tables` WHERE site = 'nv'";
答案 0 :(得分:4)
您拥有的是带有(转义)表名的字符串。它不是一个数组,尽管您可以使用explode
。
在数组中有表名后,可以使用所有表名构建UNION
查询。
<?php
$tables = "`01_12_2014`,`02_02_2015`,`02_03_2015`,`03_08_2015`,`04_05_2015`,`05_01_2015`,`06_04_2015`,`06_07_2015`,`07_09_2015`";
$tablenames = explode(',', $tables);
$table_queries = array();
foreach($tablenames as $table) {
$table_queries[] = "SELECT `informer`, `count`, `site` FROM $table WHERE site = 'nv'";
}
$table_query_all = implode("\nUNION ALL\n", $table_queries);
echo $table_query_all;
但我必须提出草莓的评论。 ;)
答案 1 :(得分:0)
FROM table1, table2, ...
语法与FROM table1 JOIN table2 JOIN ...
的语法相同,这不是您想要的。
您要使用的是UNION
。
SELECT * FROM table1
UNION
SELECT * FROM table2
UNION
...
或者使用“阵列”:
// You have a string, not an array
$tablesArray = explode(',', $tables);
// Loop over the tables and build a `SELECT` for each:
$selectQueries = array_map(function($table){
return "SELECT `informer`, `count`, `site` FROM {$table} WHERE `site` = 'nv'";
}, $tablesArray);
// Combine it all into one query
$tables_query = implode(' UNION ', $selectQueries);