MYSQL有N个表 例如cdr_20090901,cdr_20090902,cdr_20090903,cdr_20090904,一直到20101010如何循环查询这些表名哈
$sql=mysql_query("SELECT * FROM `$a` callerid like '%$keyword%' union
SELECT * FROM `cdr_20090902` WHERE callerid like '%$keyword%' union
SELECT * FROM `cdr_20090903` WHERE callerid like '%$keyword%'");
要是这样用union的话太麻烦了有365个表不能一直UNION吧,循环可以么,我用FOR的话,他总是显示最后一个表20090902的如下:
$name="cdr_";
for($i=20090901;$i<20090903;$i++){
$time=$i;
$a=$name.$time;
$sql=mysql_query("SELECT * FROM `$a` WHERE start >='$keyword2 00:00:00' and start <='$keyword3 23:59:59' and callerid like '%$keyword%'");
$row=mysql_fetch_object($sql);
         }
。如果将}放到最后一段        mysql_free_result($sql);
mysql_close($link);
后面则显示一大堆错误Warning: mysql_query() [function.mysql-query]: Access denied for user 'ODBC'@'localhost' (using password: NO) in D:\htdocs\xing\check_search1_affiche.php on line 32Warning: mysql_query() [function.mysql-query]: A link to the server could not be established in D:\htdocs\xing\check_search1_affiche.php on line 32Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in D:\htdocs\xing\check_search1_affiche.php on line 33Warning: mysql_query() [function.mysql-query]: Access denied for user 'ODBC'@'localhost' (using password: NO) in D:\htdocs\xing\check_search1_affiche.php on line 39Warning: mysql_query() [function.mysql-query]: A link to the server could not be established in D:\htdocs\xing\check_search1_affiche.php on line 39Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in D:\htdocs\xing\check_search1_affiche.php on line 40哪位大虾能帮忙哈 如何编写从cdr_20090901到20101010的循环的数据表的搜索。

解决方案 »

  1.   

    把表名写成一个数组
    $timeArr = array(.....);
    foreach ($timeArr as $key => $value) {
        $sql = "select * from $value where ...";
        $result = mysql_query($sql);
        while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
             $record[] = $row;
        }
    }
    这样就把这些表里面的所有记录都找到了!
      

  2.   

    我是按年月日计算给表命名的 如果数组的话是不是太多了啊。循环也慢啊,我修改您的代码。我把年月日分开
    $name="cdr_";
    $year="2008";
    $month="1";
    $date="1";
    for($y=2008;$y<2010;$y++){
    $year=$y;
    $timeMrr = array(01,02,03,04,05,06,07,08,09,10,11,12);
    foreach ($timeMrr as $key => $month) { 
    $timeDrr = array(01,02,03,04,05,06,07,08,09,10,11,12...31);
    foreach ($timeDrr as $key => $date) { 
    $a=$name.$year.$month.$date;
    $timeArr = array(.....); 
    foreach ($timeArr as $key => $value) { 
        $sql = "select * from $value where ..."; 
        $result = mysql_query($sql); 
        while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) { 
            $record[] = $row; 
        } 

    }
    }
    }
     运行完后没数据显示,拜托您再帮我看看 谢谢了啊!!
      

  3.   

    $result = mysql_list_tables($dbname,$dbconn); 获取数据中所有的表的信息
    while ($row = mysql_fetch_row($result)) {
           if (str_replace('cdr_','',$row[0]) >20090901 && str_replace('cdr_','',$row[0]) < 20091001){
    //表的名字就是$row[0]
    //执行单表查询 }}
      

  4.   

    $sql=mysql_query("SELECT * FROM `$a` WHERE start >='$keyword2 00:00:00' and start <='$keyword3 23:59:59' and callerid like '%$keyword%'");你这句里面,变量和另外的语句之间应该用.来连接吧...比如应该这样
    $sql = 'select * from xxx where y ='.$a.' and z='.$b;
    $result = mysql_query($sql); 
      

  5.   

    对SQL SERVER进行操作时查询语句是要这样的....MYSQL应该也是一个道理吧..个人意见..