2012-04-18 26 views
-1

我试图运行查询来确定列A是否为真。如果它是真的,则获取不同列B的内容(可能数组用“,”分隔),并使用这些内容查询不同的表。我的问题是,B列可能是一个数字或可能是10个数字全部由“,”分隔,我需要查询第二个表的列查询每个数字的前一个查询。如果有人可以帮助那会很好。通过一个或多个数组值查询表

编辑:我试图使用数组explode函数,但无法弄清楚如何查询下一个表来包含这些值。

我想象它是像

query = select * from table where location = arrayValue[1] or location = arrayValue[2] 
+0

为什么这是-1? – Rob 2012-04-18 18:05:52

回答

0

圣特尔莫·马克斯的适应这里,但改进:

<?php 
//Let's say $bcolumn is a string with the values of B column, separated by colons 
$bcolumnArray = explode(",", $bcolumn); 
array_walk($bcolumnArray, 'htmlentities'); 

//Build SQL query 
$SQL = 'SELECT * FROM table'; 
if(count($bcolumnArray)){ 
    $SQL.= ' WHERE IN ("'.implode('", "', $vbcolumnArray).'")'; 
} 

//Query your second table here 
$Qry = mysql_query($sql); 

// Results here : 
while($Res = mysql_fetch_assoc($Qry)){ 
    print_r($Res); 
} 
?> 

我建议PDO还...看看:PDO

+0

我是否运行foreach()来显示结果? – Rob 2012-04-18 17:48:20

+0

看我的编辑..... – 2012-04-18 17:50:31

+0

我想感谢大家的帮助。 – Rob 2012-04-18 18:05:21

0

使用PHP的explode()功能,您的字符串转换成一个数组。

<?php 
//Let's say $bcolumn is a string with the values of B column, separated by colons 
$bcolumnArray = explode(",", $bcolumn); 

//Build SQL query 
$sql = "SELECT * FROM table WHERE "; 
for($i=0; $i < count($bcolumnArray); $i++) 
{ 
    $sql .= "location = " . $value; 
    if($i != count($bcolumnArray)-1) 
    { 
     $sql .= " or "; 
    } 
} 

//Query your second table here 
mysql_query($sql); 
?> 

文档:http://php.net/manual/en/function.explode.php

+0

对不起,只是编辑我的帖子。我需要查询每个返回值的“位置”列。 – Rob 2012-04-18 16:33:40

+0

@Rob我编辑了我的答案。请注意我没有真正测试这个代码的错误。 – 2012-04-18 16:39:03

+0

您正在将'$ value'强制执行到SQL查询中,并盲目执行它,这很容易受到SQL注入攻击。 **不要这样做**。如果你不知道如何逃避东西,请使用[PDO](http://net.tutsplus.com/tutorials/php/why-you-should-be-using-phps-pdo-for-database-access/)正常。在这种情况下,这些数字可能只是数字并不重要,因为与其他数据一起重复是一种危险模式。这些数字可能会以HTTP参数的形式出现,您可以将其控制为零。 – tadman 2012-04-18 16:49:28