0

如何将数组插入 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:抱歉英语不好,不是我的母语。

4

6 回答 6

0

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

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

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

于 2013-04-18T14:35:09.563 回答
0

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

于 2013-04-18T14:35:28.623 回答
0

将循环更改为此

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

然后使用这个 $vNome 数组。

于 2013-04-18T14:33:29.490 回答
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).")";
于 2013-04-18T14:33:44.677 回答
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).")";
于 2013-04-18T14:34:20.113 回答
0

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

$vNome = array();

然后在一段时间内,将其更改为

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

现在,当涉及到第二个查询时,您不能只传入数组,您必须将其内爆。

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

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

于 2013-04-18T14:34:46.780 回答