select a.*,b.* from a,b where 外键相连.红色部分必须的要,不然数据是的笛卡儿积非常的多.

解决方案 »

  1.   

    select * from a union
    select * from b;
     行不?
      

  2.   

    专家坐阵, 有问必答
    http://www.kingofcoders.com
      

  3.   

    大概大家理解错了,我上面写的只是个简单例子,说明情况!比如,一个存储过程,有四-五个记录集,他们之间是没有关系的.都是比较独立的..比如第一个是显示所有产品的记录集,第二个是用户的记录集,但如果一关联就会产生问题了,并且他们之间也没什么关联,就算有关联,数据参杂进去了,不方便前台调用的时候单个对像记录集调用方便,还需要作很多判断,如果这样做的话,根本没意义.所以使用union也不符合要求
      

  4.   

    改写网络现有的Mysqli类.进行copy改写,比较笨拙的方法,如下:设置6个记录集,可以按要求设置最大的,我的需求,一个存储过程有6个就够了,极限值,扩展性不好,属于烂代码,希望有高手进行改装一下:主要function在此
    public function call_sp_ext($query){
            $this->mysqli->multi_query($query);
    $i = 0 ;

            do {
     //////////////////////第0个记录集. 默认////////////////////////
    if  ($i==0) 
    {
    if ($result = $this->mysqli->use_result()){
       while ($row = $result->fetch_row()){
      $this->row[$this->count++] = $row;
       }
       $result->close();
    }
    }

     //////////////////////第1个记录集. 假设有的话////////////////////////
     if  ($i==1) 
    {
    if ($result = $this->mysqli->use_result()){
       while ($row = $result->fetch_row()){
      $this->row1[$this->count1++] = $row;
       }
       $result->close();
    }
    }

     //////////////////////第2个记录集. 假设有的话////////////////////////
     if  ($i==2) 
    {
    if ($result = $this->mysqli->use_result()){
       while ($row = $result->fetch_row()){
      $this->row2[$this->count2++] = $row;
       }
       $result->close();
    }
    }
      //////////////////////第3个记录集. 假设有的话////////////////////////
    if  ($i==3) 
    {
    if ($result = $this->mysqli->use_result()){
       while ($row = $result->fetch_row()){
      $this->row3[$this->count3++] = $row;
       }
       $result->close();
    }
    }
    //////////////////////第4个记录集. 假设有的话////////////////////////
    if  ($i==4) 
    {
    if ($result = $this->mysqli->use_result()){
       while ($row = $result->fetch_row()){
      $this->row4[$this->count4++] = $row;
       }
       $result->close();
    }
    }
    //////////////////////第5个记录集. 假设有的话////////////////////////
     if  ($i==5) 
    {
    if ($result = $this->mysqli->use_result()){
       while ($row = $result->fetch_row()){
      $this->row5[$this->count5++] = $row;
       }
       $result->close();
    }
    }
    //////////////////////最大设置有6个记录集供使用////////////////////////
    $i = $i + 1;
            } while($this->mysqli->next_result());
            $this->affected_row_sp = $this->mysqli->affected_rows;    }
      

  5.   

    原始类:
    <?php
    define ('MY_HOST','localhost');
    define ('MY_USER','root');
    define ('MY_PASS','');
    define ('MY_DB','develop');
    define ('MY_PORT','3306');
    //For linux add this field
    define ('MY_SOCKET','/tmp/mysql_sock');
    class Model_MysqliExt{    private $mysqli;
        private $row,$row1,$row2,$row3,$row4,$row5;
        private $count,$count1,$count2,$count3,$count4,$count5;
        private $affected_row_sql;
        private $affected_row_sp;    public function Model_MysqliExt(){
        //Check system is nt or linux
            if (PHP_OS == 'WINNT'){
                $this->mysqli = new mysqli(MY_HOST, MY_USER, MY_PASS, MY_DB, MY_PORT);
            }else
            {
               $this->mysqli = new mysqli(MY_HOST, MY_USER, MY_PASS, MY_DB, MY_PORT,MY_SOCKET);
            }
            if (mysqli_connect_errno()){
                die("Connect failed:".mysqli_connect_error());
            }
            $this->row = null;
            $this->count = 0;
    $this->count1 = 0;
    $this->count2 = 0;
    $this->count3 = 0;
    $this->count4 = 0;
    $this->count5 = 0;    }
     //Query sql text    public function call_sql($sql){
            $this->mysqli->query($sql);
            $this->affected_row_sql = $this->mysqli->affected_rows;    }
     //Query store procedure text
    public function ExecuteNoReturnValue($sp_name,$sp_array) {
    $sp_parameters = "";
    for($i=1;$i<=count($sp_array);$i++)
    {
    $sp_parameters .= "'".$sp_array[$i]."',";

    }
    $sp_parameters = substr($sp_parameters,0,strlen($sp_parameters)-1); $sp_sql = " call ".$sp_name." (". $sp_parameters.");";
    // echo $sp_sql;
    $this->mysqli->query($sp_sql); }
    //////////////////////////////////
        public function call_sp($query){
            $this->mysqli->multi_query($query);
            do {
               if ($result = $this->mysqli->use_result()){
                   while ($row = $result->fetch_row()){
                      $this->row[$this->count++] = $row;
                   }
                   $result->close();
               }
            } while($this->mysqli->next_result());
            $this->affected_row_sp = $this->mysqli->affected_rows;    }

    public function call_sp_ext($query){
            $this->mysqli->multi_query($query);
    $i = 0 ;

            do {
     //////////////////////第0个记录集. 默认////////////////////////
    if  ($i==0) 
    {
    if ($result = $this->mysqli->use_result()){
       while ($row = $result->fetch_row()){
      $this->row[$this->count++] = $row;
       }
       $result->close();
    }
    }

     //////////////////////第1个记录集. 假设有的话////////////////////////
     if  ($i==1) 
    {
    if ($result = $this->mysqli->use_result()){
       while ($row = $result->fetch_row()){
      $this->row1[$this->count1++] = $row;
       }
       $result->close();
    }
    }

     //////////////////////第2个记录集. 假设有的话////////////////////////
     if  ($i==2) 
    {
    if ($result = $this->mysqli->use_result()){
       while ($row = $result->fetch_row()){
      $this->row2[$this->count2++] = $row;
       }
       $result->close();
    }
    }
      //////////////////////第3个记录集. 假设有的话////////////////////////
    if  ($i==3) 
    {
    if ($result = $this->mysqli->use_result()){
       while ($row = $result->fetch_row()){
      $this->row3[$this->count3++] = $row;
       }
       $result->close();
    }
    }
    //////////////////////第4个记录集. 假设有的话////////////////////////
    if  ($i==4) 
    {
    if ($result = $this->mysqli->use_result()){
       while ($row = $result->fetch_row()){
      $this->row4[$this->count4++] = $row;
       }
       $result->close();
    }
    }
    //////////////////////第5个记录集. 假设有的话////////////////////////
     if  ($i==5) 
    {
    if ($result = $this->mysqli->use_result()){
       while ($row = $result->fetch_row()){
      $this->row5[$this->count5++] = $row;
       }
       $result->close();
    }
    }
    //////////////////////最大设置有6个记录集供使用////////////////////////
    $i = $i + 1;
            } while($this->mysqli->next_result());
            $this->affected_row_sp = $this->mysqli->affected_rows;    }
        //Close connection and free memory    public function close_sp(){
            $this->mysqli->close();
        }
        //Get query result    public function get_rows(){
            return $this->row;
        }
    //////////////////////
    public function get_rows1(){
            return $this->row1;
        }
    //////////////////////
    public function get_rows2(){
            return $this->row2;
        }
    //////////////////////
    public function get_rows3(){
            return $this->row3;
        }
    ////////////////////
    public function get_rows4(){
            return $this->row4;
        }
        public function get_rows5(){
            return $this->row5;
        }
        //Get rows count    public function get_count(){
            return $this->count;
        }
        //Get affected rows    public function get_affected_rows($str){
            switch ($str){
               //Get affected rows from sql text           case 'sql':
                   return $this->affected_row_sql;
                   break;
               //Get affected rows from store procedure text           case 'sp':
                   return $this->affected_row_sp;
                   break;
               default:
                   return false;
                   break;
          }
        }
    }
    ?>调用方法
    <?php
    //////////////////////////////////////////////////////////////////////////////////////////////////////////////////FLEA::loadClass('Controller_Base');class Controller_TestMultiQuery extends Controller_Base
    {
        /**
         * 构造函数
         *
         * @return Controller_Default
         */
        function Controller_TestMultiQuery() {
    parent::Controller_Base();

        } /**
         * 程序入口的首页
         *
         * @return null
         */
    function actionIndex()
    {


    FLEA::loadClass('Model_MysqliExt');
    $mysqli=&new Model_MysqliExt();
    $query = 'call sp_test();';
    $mysqli->call_sp_ext($query);
    $mysqli->close_sp();
    print '<pre>';
    print_r($mysqli->get_rows());
    print '</pre>'; echo "--------------------<br>";
    print '<pre>';
    print_r($mysqli->get_rows1());
    print '</pre>';
    echo "--------------------<br>";
    print '<pre>';
    print_r($mysqli->get_rows2());
    print '</pre>';
    }

    }
    ?>这里是使用fleaphp开源框架的方式调用的,有需要地大家可以自行改成一般的就可以了