我有一个脚本,其中包含国家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 ", ";
}
提前感谢您的帮助:)
答案 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']. ")";