繁体   English   中英

我如何简化这个数组来使 MySQL 成为 where 条件

[英]how can i simplify this array to make MySQL where condition

Array (
    [0] => Array ( [ram] => 2 GB )
    [1] => Array ( [ram] => 4 GB )
    [2] => Array ( [ram] => 6 GB )
    [3] => Array ( [screen_size] => 5 - 6 Inch )
    [4] => Array ( [screen_size] => 6 - 7 Inch )
    [5] => Array ( [network_connectivity] => 3G )
    [6] => Array ( [network_connectivity] => 4G )
)

如何简化该数组以在 mysql where子句中使用??? 例如=

select * from table where (ram = '2GB' or ram = '4GB') and (screen_size = '5 - 6 Inch' or screen_size = '6 - 7 Inch') and (network_connectivity = '3G' or network_connectivity = '4G ')

我试过了

$condition = "";
if(!empty($this->input->post('datafilter'))){
foreach ($this->input->post('datafilter') as $mainfilter) {
  foreach ($mainfilter as $key => $value) {
   //echo $condition.'<br>';
   if(!empty($condition)){
    if (strpos($condition, $key) === true) {
       $con = ' AND ';
    } else {
      $con = ' OR ';
    }
    }
    else{
      $con = ' OR ';
    }
    $condition .= $key.' = '.$value . $con;
  }
}
}

结果是:ram = 2 GB OR ram = 4 GB OR ram = 6 GB OR screen_size = 5 - 6 Inch OR screen_size = 6 - 7 Inch OR network_connectivity = 3G OR network_connectivity = 4G OR

我在 PHP 方面不是很好(我是 Perl 程序员),但是这段代码似乎按您的预期工作:

<?php
    $optList=[
        [ 'ram' => '2 GB' ],
        [ 'ram' => '4 GB' ],
        [ 'ram' => '6 GB' ],
        [ 'screen_size' => '5 - 6 Inch' ],
        [ 'screen_size' => '6 - 7 Inch' ],
        [ 'network_connectivity' => '3G' ],
        [ 'network_connectivity' => '4G' ]
    ];
    $optByItems=[];
    foreach ($optList as $opts) {
        foreach ($opts as $item => $value) {
            $optByItems[$item][$value]=1;
        }
    }
    $query='';
    foreach ($optByItems as $item => $values) {
        $query .= (empty($query) ? '' : ' AND ') . "($item='" . join("' OR $item='", array_keys($values)) . "')";
    }
    echo $query;
?>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM