我想从多个相同的表(三个甚至更多)中获取数据,它们具有相同的列名(但行中的数据不同)。
所以,我想用循环获取所有表,就好像它是一个查询(一个循环),而不是三个。
我不想在获取数组时将列数增加三倍。我希望所有表使用相同的列名称。表中的数据将在数组中一个堆叠在另一个上,而不是一个接一个堆叠,使数组中的列数增加三倍。但是,一旦它们相互堆叠,“ORDER BY”过滤器将“混合”表格:“ORDER BY”将立即对所有表进行操作(如果它只是一个表),而不是所有表各个表格。
我对1表的查询如下所示:
$pdo = "SELECT * FROM " .$table1 ." ORDER BY price LIMIT "
.$current_page_offset .", " .$items_per_pages;
所以...我想要获取三个表,就像我只获取一个表一样。
*也希望保持我的限制和“ORDER BY”更多的过滤器工作。我不希望三重限制显示我想要的项目数量的三倍...
有办法吗?
*编辑:我在第3段改变了我对“混合”的描述。对不起(也许)我的英语不好。
答案 0 :(得分:2)
您想使用UNION
:
UNION
用于将多个SELECT
语句的结果合并到一个结果集中。
因此,如果您的表名称位于名为$tables
的数组中:
mb_regex_encoding($charset); // character set of database connection
foreach ($tables as $table) {
$table = '`'.mb_ereg_replace('`','``',$table).'`';
$sql[] = "(
SELECT *
FROM $table
ORDER BY price
LIMIT $current_page_offset, $items_per_pages
)";
}
$sql = implode(' UNION ALL ', $sql);
然而,听起来好像你的架构应该被规范化,这样你就没有这样的“相同”表:而是有一个带有附加列的表,以指示区别每个表。