PHP 内爆数组以创建查询
PHP implode array to create query
想法是创建以下内容:
$sql = "SELECT column1, column2 FROM table1
UNION SELECT column1, column2 FROM table2
UNION SELECT column1, column2 FROM table3
ORDER BY 'column3'";
不过我想让它保持干燥,所以我已经想到了以下我可能会使用的可能的几十个表:
$tables = array('table1', 'table2', 'table3');
$array_of_tables = array('SELECT column1, column2 FROM ', $tables[0]);
for($i = 1; $i < count($tables); $i++){
array_push($array_of_tables, "UNION SELECT column1, column2 FROM " . $tables[$i]);
}
array_push($array_of_tables, "ORDER BY 'eng'" . '"');
$sql = implode('', $array_of_tables);
我得到了正确的字符串,但是我无法使用它。任何人都可以告诉我发生了什么以及如何解决它 - 请用新手术语解释!我是 PHP 的新手并决定试一试,尽管一半的互联网都说这不值得。干杯!
你的想法是对的,就是细节有问题:
- 你正在内爆的片段之间没有空格,所以它最终像
... FROM table1UNION SELECT ...
。使用 implode(' ', $array_of_tables)
.
ORDER BY
子句中的列有引号。这将按文字字符串而不是列值排序。参见 When to use single quotes, double quotes, and backticks in MySQL。
如果您需要经常组合这些 table,您可能需要考虑使用 MySQL 的 MERGE Storage Engine。这允许您创建一个虚拟 table,其内容是其他几个 table 的组合。
试试这个
<?php
$tables = array('table1', 'table2', 'table3');
$array_of_tables = array('SELECT column1, column2 FROM ', $tables[0]);
for ($i = 1; $i < count($tables); $i++) {
array_push($array_of_tables, " UNION SELECT column1, column2 FROM " . $tables[$i]);
}
array_push($array_of_tables, " ORDER BY 'eng'");
$sql = implode('', $array_of_tables);
我不明白 for 循环的意图。我会这样解决:
$tables = array('table1', 'table2', 'table3');
$sel = "SELECT column1, column2 FROM ";
$sql = $sel . implode(" UNION $sel",$tables) . " ORDER BY 'eng'";
想法是创建以下内容:
$sql = "SELECT column1, column2 FROM table1
UNION SELECT column1, column2 FROM table2
UNION SELECT column1, column2 FROM table3
ORDER BY 'column3'";
不过我想让它保持干燥,所以我已经想到了以下我可能会使用的可能的几十个表:
$tables = array('table1', 'table2', 'table3');
$array_of_tables = array('SELECT column1, column2 FROM ', $tables[0]);
for($i = 1; $i < count($tables); $i++){
array_push($array_of_tables, "UNION SELECT column1, column2 FROM " . $tables[$i]);
}
array_push($array_of_tables, "ORDER BY 'eng'" . '"');
$sql = implode('', $array_of_tables);
我得到了正确的字符串,但是我无法使用它。任何人都可以告诉我发生了什么以及如何解决它 - 请用新手术语解释!我是 PHP 的新手并决定试一试,尽管一半的互联网都说这不值得。干杯!
你的想法是对的,就是细节有问题:
- 你正在内爆的片段之间没有空格,所以它最终像
... FROM table1UNION SELECT ...
。使用implode(' ', $array_of_tables)
. ORDER BY
子句中的列有引号。这将按文字字符串而不是列值排序。参见 When to use single quotes, double quotes, and backticks in MySQL。
如果您需要经常组合这些 table,您可能需要考虑使用 MySQL 的 MERGE Storage Engine。这允许您创建一个虚拟 table,其内容是其他几个 table 的组合。
试试这个
<?php
$tables = array('table1', 'table2', 'table3');
$array_of_tables = array('SELECT column1, column2 FROM ', $tables[0]);
for ($i = 1; $i < count($tables); $i++) {
array_push($array_of_tables, " UNION SELECT column1, column2 FROM " . $tables[$i]);
}
array_push($array_of_tables, " ORDER BY 'eng'");
$sql = implode('', $array_of_tables);
我不明白 for 循环的意图。我会这样解决:
$tables = array('table1', 'table2', 'table3');
$sel = "SELECT column1, column2 FROM ";
$sql = $sel . implode(" UNION $sel",$tables) . " ORDER BY 'eng'";