
使用 PHP 進行 MySQL 多個查詢
在 PHP 中,在單一請求中執行多個 MySQL 查詢可能具有挑戰性。本文解決了一種常見情況,即需要組合多個相互依賴的查詢才能進行高效處理。
最初的方法是使用提供的查詢來建立單獨的視圖。但是,這會導致錯誤或空結果集。為了解決這個問題,PHP 提供了 mysqli_multi_query() 函數,它允許執行串聯查詢。
下面是一個範例程式碼片段:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | $link = mysqli_connect( "server" , "user" , "password" , "database" );
$query = "CREATE VIEW current_rankings AS SELECT * FROM main_table WHERE date = X;" ;
$query .= "CREATE VIEW previous_rankings AS SELECT rank FROM main_table WHERE date = date_sub('X', INTERVAL 1 MONTH);" ;
$query .= "CREATE VIEW final_output AS SELECT current_rankings.player, current_rankings.rank as current_rank LEFT JOIN previous_rankings.rank as prev_rank ON (current_rankings.player = previous_rankings.player);" ;
$query .= "SELECT *, @rank_change = prev_rank - current_rank as rank_change from final_output;" ;
if (mysqli_multi_query( $link , $query )) {
do {
if ( $result = mysqli_store_result( $link )) {
while ( $row = mysqli_fetch_array( $result )) {
echo $row [ 'player' ]. $row [ 'current_rank' ]. $row [ 'prev_rank' ]. $row [ 'rank_change' ];
}
mysqli_free_result( $result );
}
} while (mysqli_next_result( $link ));
}
|
登入後複製
這種方法將所有查詢組合成一個單一字串並同時執行它們。 mysqli_multi_query() 函數執行成功後回傳 TRUE。
如果執行計劃需要額外的查詢,可以將它們附加到 $query 字串中,並用分號 (;) 作為分隔符號。每個結果集都可以使用 mysqli_store_result() 儲存在單獨的變數中,並在循環中使用 mysqli_fetch_array() 取得。
或者,您也可以使用 mysqli_query() 函數單獨執行查詢:
1 2 3 4 5 6 7 8 9 | $query1 = "Create temporary table A select c1 from t1" ;
$result1 = mysqli_query( $link , $query1 ) or die (mysqli_error());
$query2 = "select c1 from A" ;
$result2 = mysqli_query( $link , $query2 ) or die (mysqli_error());
while ( $row = mysqli_fetch_array( $result2 )) {
echo $row [ 'c1' ];
}
|
登入後複製
這種方法可以更好地控制查詢執行和結果處理。
以上是如何在 PHP 中有效率地執行多個 MySQL 查詢?的詳細內容。更多資訊請關注PHP中文網其他相關文章!