Where子句中的数组

时间:2013-04-18 14:30:15

标签: php mysql arrays where

如何将数组插入where子句?这是获取ID的第一个查询:

$query = "SELECT id FROM #_categories WHERE alias = 'agenda'";
$result = mysql_query($query) or die(mysql_error());
   while($linha = mysql_fetch_array($result)){
   $vNome = $linha['id']; 
}

现在是获得最终结果的第二个查询:

$query = "SELECT introtext FROM $tabela WHERE catid IN ($vNome) <> ''";

结果是:

SELECT introtext FROM #_content WHERE catid IN (36) <> ''

为什么我不能将所有ID放在IN?

子句中

PS:抱歉英语不好,不是我的母语。

6 个答案:

答案 0 :(得分:0)

将循环更改为此

$vNome = array();
$i = 0;
while($linha = mysql_fetch_array($result)){
   $vNome[$i] = $linha['id']; 
   $i++;
}

然后使用这个$ vNome数组。

答案 1 :(得分:0)

$vNome=array();
$result = mysql_query($query) or die(mysql_error());
  while($linha = mysql_fetch_array($result)){
  $vNome[] = $linha['id']; 
}

然后是sql:

$query = "SELECT introtext FROM $tabela WHERE catid IN (".implode(",",$vNome).")";

答案 2 :(得分:0)

IN是一个SQL关键字。您无法将原始PHP数组传递给SQL。

您必须先将数据读入数组,然后展开数组:

$query = "SELECT id FROM #_categories WHERE alias = 'agenda'";
$result = mysql_query($query) or die(mysql_error());
$vNome = array();
while($linha = mysql_fetch_array($result)) {
    $vNome[] = $linha['id']; // don't forget the [] to put it into an array, else the value will be scalar!
}
$query = "SELECT introtext FROM $tabela WHERE catid IN (".implode(",", $vNome).")";

答案 3 :(得分:0)

$ vNome不是一个数组。在你的while子句中,你只是覆盖变量。在此之前,初始化变量

$vNome = array();

然后在里面,将其改为

$vNome[] = $linha['id'];

现在谈到第二个查询时,你不能只是传入数组,你必须将其破坏。

$vNomeStr = implode (',',$vNome);

然后您可以在查询中使用$ vNomeStr。只要它的数字,这将工作正常,否则您还必须将每个项目封装在引号中。

答案 4 :(得分:0)

您是否尝试过这样的嵌套选择语句:

SELECT introtext 
FROM $tabela 
WHERE catid 
IN (
    SELECT id 
    FROM #_categories 
    WHERE alias = 'agenda'
);

可能有更有效的方法,但这应该有用。

答案 5 :(得分:0)

将数组插入逗号分隔的字符串将使您有机会使用IN (...)运算符中的“1,2,3”字符串