【问题标题】:Array in Where clauseWhere 子句中的数组
【发布时间】:2013-04-18 14:30:14
【问题描述】:

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

【问题讨论】:

    标签: php mysql arrays where


    【解决方案1】:
    $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】:

    把循环改成这个

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

    然后使用这个 $vNome 数组。

    【讨论】:

      【解决方案3】:

      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).")";
      

      【讨论】:

        【解决方案4】:

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

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

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

        【讨论】:

          【解决方案5】:

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

          【讨论】:

            【解决方案6】:

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

            $vNome = array();
            

            然后在while里面,改成

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

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

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

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

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2021-12-04
              • 1970-01-01
              • 2019-07-31
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多