如何使用表数组向mysql发出有效请求?

时间:2015-09-11 13:16:40

标签: php mysql

我有一个这种类型的表数组:

$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'";

2 个答案:

答案 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);