2012-10-22 99 views
0

我想將一個sql語句中的每個結果保存在一個不同的數組中。我想:Mysqli多查詢 - 排序結果

 $sql = "SELECT * FROM `link_server` WHERE `in_use` = false;"; 
     $sql .= "SELECT * FROM `link_queue` WHERE `active` = false;"; 

     if ($db->multi_query($sql)) 
     { 
      do 
      { 
       // Erstes Abfrageergebnis ausgeben 
       if ($result = $db->store_result()) 
       { 
        // Abfrageergebnis ausgeben 
        while ($server_fetch = $result->fetch_array()) 
        { 
         $server[] = $server_fetch; 
        } 

        $result->close(); 

       } 
       // Trenner fuer Zweites Abfrageergebnis 
       if ($db->more_results()) 
       { 
        echo "<hr />test"; 
        $queue[] = $server_fetch; 
       } 
      } while ($db->next_result()); 
     echo "Servers:"; 
     print_r($server); 
     echo "Queue:"; 
     print_r($queue); 
     }   

從第一個語句的結果應該被保存在陣列中$server,第二個應該被保存在陣列$queue英寸

上面的示例將完整的返回值(來自兩個語句)存儲在第一個數組($server)中。第二個數組是空的。

我該如何解決這個問題?

感謝您的幫助!

+0

你爲什麼一次做多個查詢?這似乎是不必要的複雜? – Landon

+0

因爲其更快,更容易概述..;) 但這不是問題;) – user1766080

+0

我懷疑這樣做的時間節省很多,無論如何是很大的。我強烈建議將其分成兩個獨立的部分,然後分別測試每個部分的準確性。 – Landon

回答

1

$db->more_results()是一種標記已達到查詢結果的結尾而不是獲得下一組結果的方式。你可以用它來告訴你的循環開始加載下一個數組 - 例如設置一個標誌。

if ($result = $mysqli->store_result()) { 
    while ($server_fetch = $result->fetch_row()) { 
     if (!$second) { 
      $server[] = $server_fetch; 
     } else { 
      $queue[] = $server_fetch; 
     } 
    } 
    $result->close(); 
} 
/* next set of results */ 
if ($mysqli->more_results()) { 
    $second = true; 
} 

或者,你可以使用一個變量的變量,像這樣:

/* set up variables */ 
$server = array(); 
$queue = array(); 
$active = 'server'; 

/* execute multi query */ 
if ($mysqli->multi_query($query)) { 
    do { 
     /* store result set */ 
     if ($result = $mysqli->store_result()) { 
      while ($server_fetch = $result->fetch_row()) { 
       ${$active}[] = $server_fetch; 
      } 
      $result->close(); 
     } 
     /* next set of results */ 
     if ($mysqli->more_results()) { 
      $active = 'queue'; 
     } 
    } while ($mysqli->next_result()); 
} 

雖然我與評論者,以同意,這增加了大量的精力和額外的代碼複雜原本簡單的對要求。

+0

好吧謝謝你的所有答案..我認爲你是對的..它只是比我想象的更多的代碼,只是更復雜..所以我只是把它放在2個獨立的Querys和它的完成。謝謝! – user1766080