【问题标题】:SQL select everything in an arraySQL选择数组中的所有内容
【发布时间】:2011-07-27 08:36:55
【问题描述】:

我的作业有问题例如有一个类别数组 $cat=array('1','4','5','7');现在我需要根据类别从 db 中选择产品

SELECT * FROM products WHERE catid='1'
SELECT * FROM products WHERE catid='4'
SELECT * FROM products WHERE catid='5'
SELECT * FROM products WHERE catid='7'

是否可以在单个查询中执行此操作?因为四个查询的最终结果会合并。

【问题讨论】:

    标签: sql select


    【解决方案1】:
    SELECT * FROM products WHERE catid IN ('1', '2', '3', '4')
    

    【讨论】:

    • 此查询是否仅按此顺序返回数据?像第一个记录是 id=1,第二个是 2 等等?
    • 为确保排序,您必须在查询中添加 ORDER BY。 SELECT * FROM products WHERE catid IN ('1', '2', '3', '4') ORDER BY catid
    【解决方案2】:
    $SQL_Part="("
    $i=0;
    while ($i<length($cat)-1)
    {
       $SQL_Part+=$cat[i]+",";
    }
    $SQL_Part=$SQL_Part+$cat[$i+1]+")"
    
    $SQL="SELECT * FROM products WHERE catid IN "+$SQL_Part;
    

    它更通用,适合任何数组!!

    【讨论】:

      【解决方案3】:
      // array of $ids that you need to select
      $ids = array('1', '2', '3', '4', '5', '6', '7', '8');
      
      // create sql part for IN condition by imploding comma after each id
      $in = '(' . implode(',', $ids) .')';
      
      // create sql
      $sql = 'SELECT * FROM products WHERE catid IN ' . $in;
      
      // see what you get
      var_dump($sql);
      

      更新:(一个简短的版本和更新缺少逗号)

      $ids = array('1','2','3','4');
      $sql = 'SELECT * FROM products WHERE catid IN (' . implode(',', $ids) . ')';
      

      【讨论】:

      • 您的答案对于数组/列表中的大量值很有用
      • @elliotching 是的,您只需要一个带有 id 的数组,其他所有内容都由 1-2 行脚本生成,这里是长版本,只是为了可读性和每行内容的 cmets
      猜你喜欢
      • 2016-12-22
      • 1970-01-01
      • 2016-11-03
      • 2012-03-29
      • 1970-01-01
      • 2020-09-01
      • 1970-01-01
      • 2021-01-25
      • 1970-01-01
      相关资源
      最近更新 更多