【问题标题】:PHP - Pass array values to mysql query and fetch the resultPHP - 将数组值传递给 mysql 查询并获取结果
【发布时间】:2021-03-25 13:53:38
【问题描述】:
$dataSet = Array ( 
    [0] => Array ( [quantity] => 22 [sr_no] => 71 [batch_id] =>5 [inq_id] => 91 ) 
    [1] => Array ( [quantity] => 35 [sr_no] => 72 [batch_id] => [inq_id] => 92 ) 
    [2] => Array ( [quantity] => 20 [sr_no] => 69 [batch_id] => [inq_id] => 90 ) 
    [3] => Array ( [quantity] => 45 [sr_no] => 75 [batch_id] => 6 [inq_id] => 94 ) 
    [4] => Array ( [quantity] => 15 [sr_no] => 70 [batch_id] => 6 [inq_id] => 90 ) 
)

我有上面的数组,我需要从中获取每个 sr_no、batch_id 并需要检查表中是否存在组合(例如第一行 sr_no => 71 & batch_id => 5)( part_list ) .我已经尝试了下面的代码,但它正在获取所有内容。如果有更好的方法也准备实施。

$keyedExistingPartRows = array_column(
    $this->db
        ->where_in('batch_id', array_column($dataSet, 'batch_id'))
        ->where_in('sr_no', array_column($dataSet, 'sr_no'))
        ->get('part_list')
        ->result_array(),
    null,
    'sr_no'
);

提前致谢。

【问题讨论】:

  • 两个单独的 where_in 与列值的完整数组,在这里开始毫无意义 - 这根本不检查您正在寻找的“组合”。你最终需要的 WHERE 子句类似于WHERE (sr_no = 71 AND batch_id = 5) OR (sr_no = 75 AND batch_id = 6) OR …
  • @CBroe 感谢您的回复。你能解释一下如何实现它吗?
  • 您还必须考虑没有批次 ID 的条目。这是您想要寻找的合法组合吗?
  • 在这些情况下,批处理 id 是否是数据库中的空字符串,而不是 null
  • 我无法测试它,因为我没有设置 Codeigniter 项目,而且我不喜欢用我没有测试过的代码发布答案。试着写它,它是一个简单的foreach。循环您的数组,在循环内放置一个 $this->db->or_where 调用,并将其余部分(getresult_array)放在循环外。

标签: php mysql codeigniter


【解决方案1】:

据我了解,您希望同时检查 sr_nobatch_id。 如果您愿意使用原始 SQL 查询,您可以先连接两列,然后为连接后的列提供数组并找到所需的结果。

请试试这个

$temp_Arr = [];

foreach($dataSet as $val){
    $temp_Arr[] = $val['sr_no']."-".$val['batch_id'];    
}
$sr_no_and_batch_id = "('".implode("', '", $temp_Arr)."')";
//echo $sr_no_and_batch_id;

$sql="SELECT * FROM `part_list` WHERE CONCAT(sr_no, '-', batch_id) IN $sr_no_and_batch_id";    
$query = $this->db->query($SQL);
return $query->result_array();

【讨论】:

    猜你喜欢
    • 2019-03-06
    • 1970-01-01
    • 2011-03-31
    • 1970-01-01
    • 1970-01-01
    • 2015-04-30
    • 1970-01-01
    • 2011-10-25
    • 2021-04-05
    相关资源
    最近更新 更多