有这样的表table_20101101,table_20101102,table_20101103,.......
把它们放在数组里 $tableArr = array('table_20101101,','table_20101102,','table_20101103,',...);
如果这样写sql的话
$limit = 50;
$offset = ($page - 1) * $limit;
foreach ($tableArr as $table)
{
  $sql .= "SELECT * FROM $table UNION ";
}
 $sql = rtrim($sql, "UNION");
 $sql .= "LIMIT $offset, $limit"; 
$res = $db->fetchAll($sql);这样写分页很简单;但是如果 我不UNION 联合查询如下方式写:foreach ($tableArr as $table)
{
  $sql = "SELECT * FROM $table";
  $res = array_merge($res,$db->fetchAll($sql));
  ......
}
那我分页怎么办呢?这样写可以提高些效率就是如果某次或某几次循环得到的结果满足分页数$limit
就可以退出循环。但是分页就很复杂了!每次循环过后都要计算下次循环的偏移量和限制条数。谁能搞定给高分!!

解决方案 »

  1.   

    先判断数组大小,用array_slice   可以实现,类似分页效果
    我倒是怀疑,你这个效率没问题吗?
      

  2.   

    你这种分表方法应该使用merge引擎来分吧,如果你数据库是MYSQL的话,否则的话你的查询语句不可能高效的,特别是如果你还要带条件查询的话。
      

  3.   

    array_slice 会查出所有的然后再array_slice 我感觉还不如union查询呢。
    我放在循环里就是为了按需查询,效率肯定比UNION。我用的是MySQL;merge引擎没搞过,研究一下!
      

  4.   

    刚看了下Merge引擎,它效率也不高 它和UNION区别 只不过是把表整合逻辑放在数据库这边了,而我的第一种方法是放在PHP这边了。
      

  5.   

    Merge引擎的效率绝对比你用union高多了,你用大数据量测试下嘛