$str="SELECT * FROM talbe having ( 姓名 like '%奥巴马%'||职业 like  '%政治家%') limit ".($page-1)*$num."$conn=@mysql_connect("localhost","root","123456","test");//连接test数据库后,如何将test下的各个表合并查询输出结果?貌似
for(...){//循环求出表名
....
tableabcxyz= talbe1,talbe2,...talbe3
}$str="SELECT * FROM talbeabcxyz having ( 职业 like  '%医生%') limit ".($page-1)*$num."....求解。

解决方案 »

  1.   

    每张表建立外键,可将所有表链接起来查询。
    如:表1:
    CREATE TABLE `mis_link` (
      `lid` int(6) NOT NULL,
      `cid` int(6) NOT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    表2:
    CREATE TABLE `mis_commodity` (
      `cid` int(6) NOT NULL auto_increment,
      `comName` varchar(20) NOT NULL,
      `comPrice` varchar(20) NOT NULL,
      PRIMARY KEY  (`cid`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    表3:
    CREATE TABLE `mis_order` (
      `oid` int(6) NOT NULL auto_increment,
      `sid` int(6) NOT NULL,
      `cid` int(6) NOT NULL,
      `ordTime` varchar(20) NOT NULL default '',
      `ordPrice` varchar(20) NOT NULL default '',
      PRIMARY KEY  (`oid`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    select o.oid,l.lid,c.cid,comName,comPrice,ordTime
    from mis_order o,mis_link l,mis_commodity c
    where o.oid=l.lid and c.cid=l.cid;
      

  2.   

    版主您好!我想通过类似
    $str="SELECT * FROM talbe having ( 职业 like  '%医生%') limit ".($page-1)*$num."
    的语句查询多个表后的结果,就说是talbe不只一个,而是数据库test下的多个表。
      

  3.   

    talbe 就没懂啥意思...table就有点明白了...select name from table1 where name like "obama%"
    union
    select name from table2 where name like "obama%"
    尝试使用union操作,但注意select出来的列数必须一致,不一致的可以用null补充
      

  4.   

    谢#3楼;
    不太理解
    select o.oid,l.lid,c.cid,comName,comPrice,ordTime
    from mis_order o,mis_link l,mis_commodity c
    where o.oid=l.lid and c.cid=l.cid;中的o.oid,l.lid,c.cido和o.oid=l.lid and c.cid=l.cid;里的o.  l.  和  c.  各是什么意思?
    及mis_order o,mis_link l,mis_commodity c中的表名后加空格后分别加o,l,c分别是什么意思您的意思是说如果有多个表,只需把它们用,号分开就可以了吗?如:
    $str="SELECT 字段名,字段名 FROM talbe1,talbe2,talbe3,talbe4 having ( 职业 like '%医生%') limit ".($page-1)*$num."
      

  5.   

    前面的字段列表和后面的where字段当然也需要加上表前缀。要不然谁知道是哪个表的字段。
      

  6.   

    谢#6楼;select name from table1 where name like "obama%"
    union
    select name from table2 where name like "obama%"类似下面的语名正确吗?可以这样写吗:
    $str="SELECT * FROM table having ( 职业 like '%医生%'||其他 like '%医生%') 
    union
    SELECT * FROM table2 having ( 职业 like '%医生%'||其他 like '%医生%') 
    union
    SELECT * FROM table3 having ( 职业 like '%医生%'||其他 like '%医生%') 
    limit ".($page-1)*$num.",".$num;
    另?如不果知道表的多少和名称如何循环取得test下各表名?
      

  7.   

    建议楼主看看sql中的多表链接查询。
    http://user.qzone.qq.com/937461184/blog/1330412851
    select [表名1].表1字段,[表名2名称的缩写].表2字段,[表名3].表3字段,……
    from [表1名] as [表1名称的缩写], [表2名] as [表2名称的缩写], ……
    where [表名1].表1字段=[表名2].表2字段 and [表名2].表2字段=[表名3].表3字段……;
    其中 as 可以用 空格 代替。
    三个表以上建议用 关键字 join …… in ……
      

  8.   


    可是o  l  c 没见跟表名有关联关系啊?怎么识别的?
    还有from mis_order o,mis_link l,mis_commodity c 
    这句from后面不是只要表名就可以了吗,后加o  l  c各是什么意思
      

  9.   

    多谢#10楼:看了您所发的网址,不过还是没解决.
    以下不明白望继续指点下:select [表名1].表1字段,[表名2名称的缩写].表2字段,[表名3].表3字段,……
    from [表1名] as [表1名称的缩写], [表2名] as [表2名称的缩写], ……
    where [表名1].表1字段=[表名2].表2字段 and [表名2].表2字段=[表名3].表3字段……;
    可以改成 以下吗?
    1. [表名2名称的缩写]改成 直接用 [表名2];
    2.  去掉form后面的 as和缩写名称;为什么要加as和缩写名称呢?
    3.where后是我想要的条件:
    如:select [表名1].表1字段,[表名2].表2字段,[表名3].表3字段,……
    from [表1名], [表2名], ……
    having ( 职业 like '%医生%'||其他 like '%医生%') limit ".($page-1)*$num.",".$num;我要查询各表所有字段该如何写呢类似?
    select [表名1].*,[表名2].*,[表名3].*,……
    from [表1名], [表2名], ……
    having ( 职业 like '%医生%'||其他 like '%医生%') limit ".($page-1)*$num.",".$num;正确的该如何写呢?比如有几十张表也可用这种方法吗?
      

  10.   

    1、2都可以,只不过为了阅读好书写方便才加的缩写。
    至于3,如果每张表中都有要查询的字段,那当然可以;如果没有,就不晓得了,你可以实际实验下。
    十几张表,用这种方法,看着都累,还不如将每张表的查询结果存到数组中,然后将所有的结果数组压入一个大数组中:$arr1 = array();
    $tables = array("tab1","tab2",……);
    foreach($tables as $table){
      $arr2 = array();
      $sql = "select * from ".$table;
      $result = mysql_query($sql,$this->connect());
      if (mysql_affected_rows() > 0){
    while($infor = mysql_fetch_array($result)){
    array_push($arr2,$infor);
    }
      }else{
    echo "查询 $table 失败!";
      }
      mysql_close();
      array_push($arr1,$arr2);
    }
    echo "所有数据-->>";print_r($arr1);echo"<br/>";
    //在mysql_fetch_array()加入第二个参数MYSQL_ASSOC,返回的结果数组的键名就是数据库表的字段名。
      

  11.   

     array_push($arr2,$infor)改成:
    $arr2[] = $infor;
    下面同理。
    以前我用的array_push()在循环中没有加上,貌似只能加一次。你可以用[]试试。