【问题标题】:SQL query based on comma separated values condition? [duplicate]基于逗号分隔值条件的 SQL 查询? [复制]
【发布时间】:2012-09-23 23:16:25
【问题描述】:

可能重复:
MySQL Select Multiple VALUES

假设我有一组像 (3,2,5) 这样的数字,我用来拆分它们并搜索 mysql 以获取值的正常方法是在 PHP 中使用爆炸来拆分它们

示例

$string = '3,4,5';
$array = explode(',',$string);
foreach($array as $value){
    $query = 'SELECT ID FROM TABLE WHERE ID = "'.$value.'"';
}

它像这样工作,但它使脚本非常慢

我现在是否需要将此字符串拆分为它自己的查询并返回结果而不使用 PHP 循环?

【问题讨论】:

  • 您是否在循环内执行该查询?
  • 兄弟,你应该先阅读基础知识。
  • 请告诉我,当您已经有一个 id 数组时,您实际上并不仅仅是从表中选择 id...

标签: php mysql


【解决方案1】:

使用IN

$string = '3,4,5';
$query = "SELECT ID FROM TABLE WHERE ID IN ($string)";

【讨论】:

    【解决方案2】:

    为什么不是WHERE ... IN ...

    select ID from TABLE where ID in (3,4,5)
    

    【讨论】:

    • 因为我不知道我还是 mysql 新手 :)
    • 这是一个标准的 sql 功能。无论哪种方式都无需担心。每个人都必须从某个地方开始。
    【解决方案3】:

    如果你的 $string 变量是:

    $string = '3,4,5';
    

    尝试这样构建您的查询:

    $query = 'SELECT ID FROM TABLE WHERE ID in (".$string.")';
    

    你不需要循环。

    【讨论】:

      【解决方案4】:

      您可以使用IN 运算符。

      此外,请确保应用正确的转义(在这种情况下,这无关紧要,但在通过 Web 请求提交字段时会这样做):

      $string = '3,4,5';
      $array = explode(',', $string);
      
      // cast all array elements into integers
      $numbers = join(',', array_map('intval', $array));
      
      $query = "SELECT ID FROM TABLE WHERE ID IN ($numbers)";
      

      另一种奇特的方式是使用准备好的语句:

      $placeholders = join(',', array_fill(0, count($array), '?'));
      $query = "SELECT ID FROM TABLE WHERE ID IN ($placeholders)";
      

      然后要执行查询,您可以像这样绑定数字(PDO 示例):

      // prepare the query, looks like 'WHERE ID IN (?,?,?)'
      $stmt = $db->prepare($query);
      // execute the query and pass the array values
      $stmt->execute($array);
      

      【讨论】:

        猜你喜欢
        • 2010-10-05
        • 2011-12-27
        • 1970-01-01
        • 2014-01-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-18
        • 1970-01-01
        相关资源
        最近更新 更多