从数组OR逗号分隔的字符串:只在一个查询中从db获取字段

时间:2012-02-24 16:34:54

标签: php mysql

我有多个数值,我可以表示为数组或逗号分隔的字符串。对于这些值中的每一个,我想选择相应的数据库行。是否可以在一个查询中执行此操作?

// data examples
$array = array(3, 6, 200); // or more values
$string = '3,6,200' ; // or more values

我可以对每个值执行以下查询,以从表中获取字段:

SELECT email FROM table WHERE id='$array_value';

但是如何在一个查询中得到这个?

3 个答案:

答案 0 :(得分:4)

您应该使用IN运算符。如果$data是数组或逗号分隔的数字列表(字符串),请执行:

$in = is_array($data) ? implode(',', $data) : $data;
$query = "SELECT email FROM table WHERE id IN (" . $in . ")";

只有在确定数组中的元素是安全的时才执行此操作。

如果您必须确保数据安全,可以执行此操作

$in = is_array($data) ? 
        "'" . implode("','", array_map('mysql_real_escape_string', $data)) . "'" : 
        "'" . mysql_real_escape_string($data) . "'";

或者,如果您期望整数值,请使用:

$in = is_array($data) ? 
        implode(',', array_map('intval', $data)) : 
        (int)$data;

答案 1 :(得分:2)

尝试使用IN

$query = 'SELECT email FROM table WHERE id IN (' . ( is_array( $ids ) ? implode( ',', $ids ) : $ids ) . ')';

假设$ids是一个字符串或数组的ID列表。

答案 2 :(得分:1)

// $vals is your "array or comma-separated string"
if( is_array($vals)) $vals = implode(",",$vals);
mysql_query( "SELECT `id`, `email` FROM `table` WHERE `id` IN (".$vals.")");

我也选择了id,这样您就可以在循环搜索结果时识别哪个电子邮件属于哪个ID。如果这不重要,你可以放弃它。