2014-02-05 39 views
0

我有了國家ID代碼爲$ item_details [國家]這是昏迷分隔列表的腳本。是否有更簡單的方法做,涉及MySQL的一個PHP foreach循環?

爲了顯示國家的名稱(存儲在MySQL的),它需要運行當前每個迴路獲得國家名稱,然後顯示它。

爲了防止腳本連接到每個單一名稱的mySQL,是否有一種更簡單的方法可以一次獲得所有名稱,然後在循環中顯示它們,以便只有1個mySQL查詢?

如:

$all_country_names = $db->get_sql_field("SELECT name,id FROM db_countries"); 

這是我現在有:

// $item_details['countries'] are the coma delimited country IDs 

// Changing the coma delimited IDs into an array 
    $array = explode(',', $item_details['countries']); 

// Running the loop 
    foreach($array as $key=>$value){ 

// Getting each country name from the database based on the ID 
    $country_name = $db->get_sql_field("SELECT name FROM db_countries WHERE id='".$value."'");  

// Displaying each country name 
    echo $country_name; 
    echo ", "; 
} 

預先感謝您的幫助:)

+0

Coul dyou使用foreach循環創建一個長mysql查詢,然後運行該查詢一次? – Ir1sh

+0

也許這個問題的答案將幫助您http://stackoverflow.com/questions/1307618/multiple-mysql-insert-statements-in-one-query-php – Ir1sh

+0

[Rú使用Drupal的? – ARUN

回答

0

首先:您的腳本不重新連接每個聲明..它只是一個新的查詢! 你可以這樣說:

$country_names = $db->get_sql_field("SELECT name FROM db_countries WHERE id IN(" .explode(',', $item_details['countries']) .")"; 

參考IN子句:http://www.tutorialspoint.com/mysql/mysql-in-clause.htm

0

是的,你可以使用IN條款這樣

$in_text = implode(",", $array) 
$country_name = $db->get_sql_field("SELECT name FROM db_countries WHERE id IN($in_text)");  
0

你可以把你的ID陣列上和稍後做:

$all_country_names = $db->get_sql_field("SELECT name,id FROM db_countries WHERE id IN(" . join(",", $idArray) . ")"); 
0

更新sql here

$sql = "SELECT name FROM db_countries WHERE id IN(" .$item_details['countries']. ")"; 
相關問題