0

我想从多个相同的表(三个甚至更多)中获取数据,它们具有相同的列名(但行中的数据不同)。

所以,我想用循环来获取所有表,就好像它是一个查询(一个循环),而不是三个。

获取数组时,我不想将列数增加三倍。我希望所有表都使用相同的列名。表格中的数据将在数组中一个叠放在另一个上,而不是一个接一个,使数组中的列数增加三倍。但是,一旦它们堆叠在一起,“ORDER BY”过滤器将“混合”这些表:“ORDER BY”将同时作用于所有表(就像它只是一个表一样),而不是全部单独的表。

我对 1 个表的查询如下所示:

$pdo = "SELECT * FROM " .$table1 ." ORDER BY price LIMIT " 
       .$current_page_offset .", " .$items_per_pages;

所以...我想获取三个表,就像我只获取一个表一样。

*也想保持我的限制和“ORDER BY”甚至更多的过滤器工作。我不希望在我的页面上显示三倍于我想要的项目数量的三重限制......

有没有办法做到这一点 ?

*编辑:我在第 3 段更改了对“混合”的描述。对不起(也许)我的英语不好。

4

1 回答 1

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

但是,听起来好像您的架构应该被规范化,这样您就没有这样的“相同”表:而是有一个带有附加列的表来指示每个表的区别。

于 2012-08-04T20:54:13.800 回答