是否有更简单的方法来执行涉及mySQL的PHP​​ foreach循环?

时间:2014-02-05 11:24:05

标签: php mysql loops foreach

我有一个脚本,其中包含国家ID代码列表$ item_details [countries],这些代码是逗号分隔的。

为了显示国家/地区的名称(存储在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 ", ";
}

提前感谢您的帮助:)

4 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

是的,您可以像这样使用IN子句

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

答案 2 :(得分:0)

您可以将ID放在数组上,然后执行以下操作:

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

答案 3 :(得分:0)

在这里更新了sql

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