【问题标题】:Php mysql select where array in arrayphp mysql选择数组中的位置
【发布时间】:2014-12-12 15:28:58
【问题描述】:
    id |   sales_id   
    ===+================
    1  |    1,2       
    2  |    1,2       
    3  |    3         
    4  |    1

$id = array('1','2');

$query->where($id.' IN (sales_id)'); 

我需要返回 id : 1,2,4

来自包含数组的列

数组中的哪里有可能?

我用 foreach 解决了这个问题,但我认为有更好的解决方案

$sales = $this->getSales();
    foreach ($sales as $sale) {

        $db = JFactory::getDbo();
        $query = $db->getQuery(true);
        $query->select('*');
        $query->from('#__hair_service');
        $query->order('ordering ASC');
        if($id){
        $query->where('id = '.$id);    
        }
        $query->where('state = 1');
        $query->where($sale->id.' IN (sales_id)');


        $db->setQuery($query);
        $results[] = $db->loadObjectList();
     }

        $services = array();
        foreach($results as $result) {
        $services = array_merge($services, $result);
        }

    return $services;

【问题讨论】:

  • MySQL 没有数组数据类型之类的东西,最后我检查了一下。 (即使确实如此,大多数了解数据库设计的人都会警告您不要以您尝试的方式使用它。)
  • 为每个 php 数组项添加 AND WHERE 怎么样?
  • 您的问题不清楚。请改写。
  • 你知道什么是关系吗?

标签: php mysql arrays


【解决方案1】:

如果您的问题是如何在IN 语句中使用数组,我相信是这样,那么这段代码应该会有所帮助:

$ids = array(1,2,3);
$stm = $pdo->prepare("SELECT * FROM t WHERE sales_id IN (?,?,?)");
$stm->execute($ids);

显然,您并不总是知道数组中有多少个值,因此您可以使用它来动态生成占位符:

$ids = array(1,2,3);
$in  = str_repeat('?,', count($ids) - 1) . '?';
$sql = "SELECT * FROM table WHERE sales_id IN ($in)";
$stm = $db->prepare($sql);
$stm->execute($ids);
$data = $stm->fetchAll();

您也可以考虑添加另一个数组元素,将所有元素组合在一起:

$ids = array(1,2,3);
$ids[] = implode(",",$ids);
$in  = str_repeat('?,', count($ids) - 1) . '?';
$sql = "SELECT * FROM table WHERE sales_id IN ($in)";
$stm = $db->prepare($sql);
$stm->execute($ids);
$data = $stm->fetchAll();

不幸的是,如果您需要测试 id 的所有变体,即 1,2 / 2,1 / 1,3 / 1,2,3,这将无济于事。这可能需要审查您的数据库设计

【讨论】:

  • 只是想提一下,implode(',', str_repeat('?', count($ids)))。最后一个? 的特殊情况让我有点抽搐。 :)
  • @cHao 1. 我必须将它存储在 sn-ps 和 2.我从 sn-ps 粘贴,很好,现在已修复。干杯
【解决方案2】:

这是我的答案 ->where("col IN (".$elements.")")

$id = array(1,2,3);

$query->where('id IN ('.implode(',',$id).')');

【讨论】:

  • $id 将字符串化错误;你最终会得到id IN (Array)
猜你喜欢
  • 2010-10-28
  • 1970-01-01
  • 2012-04-08
  • 1970-01-01
  • 2018-02-11
  • 2023-03-24
  • 2014-04-25
  • 2022-07-06
  • 2018-12-13
相关资源
最近更新 更多