2013-01-03 53 views
0

使用PHP和MySQL。我有一个数组P,它包含可能的产品类别数量的值。在我的表中,它也有存储类别号码和其他字段的“类别”字段。我想要的是在所有行中选择数据,其中字段“category”在数组P中有任何值。我应该怎么做?我怎样才能选择数据哪一个字段是数组的成员?

例如
P = [1,7,13]

SELECT * FROM table WHERE category=P[1] OR categry=P[2] OR category=P[3].... 
+0

是“P”列名吗?如果是这样,你是否意识到数组不是'MySQL'中的数据类型。你实际上在那一栏中存储了什么?一个号码?一个字符串? – MichaelRushton

+0

@MicaelRushton P不是列名。我在字段“类别”中存储号码。 –

回答

1

尝试implode() function

$sql = "SELECT * FROM table WHERE category IN (".implode(",", $P).")" 
+0

谢谢X.L.Ant,你的回答非常紧凑,适合用在我的代码中。 –

2

用途:

$categories = implode(', ', $p); // Where $p is the array 
SELECT * FROM table WHERE category IN ($categories) 
0

你应该使用IN关键字:

SELECT * FROM table WHERE category IN (p[1], p[2], p[3]) 

implode

$categories = implode(',', $P); 
0

使用字符串连接:

$P = array(1, 7, 13); 
$query = "SELECT * FROM table WHERE category=".$P[1]." OR 
      category=".$P[2]." OR category=".P[3]."...."; 

$query = "SELECT * FROM table WHERE category={$P[1]} OR 
      category={$P[2]} OR category={P[3]}...."; 
0

因为p阵列可以具有更多/更少在比3个值,你最好先做一个查询:

$p = array('1', '2', '3', '4', '5'); 

$auto = ''; 
foreach($p as $value){ 
    $auto .= "'".$value."'" . " OR category= "; 
} 
$auto = substr($auto, 0 , strlen($auto) - 14); 

$the_query = "SELECT * FROM table WHERE category= $auto"; 

echo $the_query; 
// mysql_query($the_query); 

与具有3个值将是P中的上述代码的结果是:

SELECT * FROM table WHERE category= '1' OR category= '2' OR category= '3' OR category= '4' OR category= '5' 

这将自动地使P阵列由值的数目基于该查询。

相关问题