【问题标题】:How to append ORDERBY with where condition in php如何在 php 中使用 where 条件附加 ORDERBY
【发布时间】:2021-08-03 08:59:21
【问题描述】:

我在 php 中使用 mysql 和 Rest Api,我想根据条件使用“orderby”(如果“filterId”==3 或 4)。换句话说:

  1. 如果我通过 filterId='3' 那么查询应该像SELECT ......ORDER by p.sp ASC/DESC
  2. 如果我通过 filterId='4' 那么查询应该像 SELECT ......ORDER by m.merchantName ASC/DESC
  3. 如果我同时传递两个参数,filterId='3' 和 filterId='4' 那么查询应该像SELECT ......ORDER by m.merchantName,p.sp ASC/DESC
  4. 如果未通过 filterId='3' 或 filterId='4' 则 orderby 不应用/追加

我该怎么做?这是我当前的代码:

if(isset($_GET["Filter"]))
            {
                $filter=trim($_GET['Filter']);
                $data=json_decode($filter);
               // echo "<pre>";print_R($data);
                foreach($data as $dt)
                    {   
                        foreach($dt as $d)
                            {
                                //echo $d->filter_id;
                                if($d->filter_id=="1")
                                {
                                    
                                }
                                if($d->filter_id=="3")
                                {
                                    
                                }
                                }
}

【问题讨论】:

  • 如果我同时传递两个参数,filterId='3' and filterId='4' ???一个变量如何同时具有两个不同的值?
  • @Akina:我想如果我们传递两个参数,那么查询应该像“ORDER BY p.sp,m.merchantName ASC/DESC”
  • 您的问题是不清楚。请展示$data 的不同样本,它们代表了您描述的所有场景。

标签: php mysql sql


【解决方案1】:

试试这个。

    $query = "Select * from .... ORDER BY";
        
        if(isset($_GET["Filter"]))
                    {
                        $filter=trim($_GET['Filter']);
                        $data=json_decode($filter);
                       // echo "<pre>";print_R($data);
                        foreach($data as $dt)
                            {   
                                foreach($dt as $d)
                                    {
                                        //echo $d->filter_id;
                                        if($d->filter_id=="1")
                                        {
                                           $query .='ORDER BY p.asp'; 
                                        }
                                        else if($d->filter_id=="3")
                                        {
                                            $query .='ORDER BY m.merchantName'; 
                                        }
                                        else 
                                        {
                                            break;
                                        }
        
                                        }
        }

对于您的第三个条件,您可能必须使用 in_array_all() 如下:

function in_array_all($lookfor, $mainarray) {
   return empty(array_diff($lookfor, $mainarray));
}

【讨论】:

  • 在这种情况下如何使用“ASC”和“Desc”
  • 如果我同时通过 "filterid='3' 和 filterid='4' ...那么?
  • 可以保存在这些变量中 $order_by_p.asp = 'p.asp ASC';或 $order_by_p.asp = 'p.asp DESC';取决于您何时使用 ASC 或 DESC 的逻辑。
  • 对于这两个值,过滤器 id 不能同时为 3 和 4,除非它是一个数组,即使它包含两个值但在不同的索引上,因此您必须检查 3 和 4 是否存在在数组中并执行逻辑。
  • 这是无效的 php 代码,empty() 应替换为 ! 以达到相同的效果。
【解决方案2】:
//Try this    
$query = 'select * from ...';
    $order_by_clause = '';
    
    if(isset($_GET["Filter"]))
    {
       $filter=trim($_GET['Filter']);
       $data=json_decode($filter);
       foreach($data as $dt)
       {   
          foreach($dt as $d)
          {
             //echo $d->filter_id;
             if($d->filter_id=="3")
             {
                $order_by_clause = 'ORDER BY p.sp ASC';
             }
             else if($d->filter_id=="4")
             {
                $order_by_clause = 'ORDER BY m.merchantName';
             }
             else if(($d->filter_id=="3") && if($d->filter_id=="4"))
             {
                $order_by_clause = 'ORDER BY m.merchantName,p.sp';
             }
             else if(!(($d->filter_id!="3") || if($d->filter_id!="4"))
             {
                $order_by_clause = '';
             }
          }
       }
    }
    
    $query .= $order_by_clause;

【讨论】:

  • 请不要在 Stack Overflow 上发布纯代码答案。 elseif 是 PHP 中的一个词。
  • if(($d-&gt;filter_id=="3") &amp;&amp; if($d-&gt;filter_id=="4")) 不是有效的 PHP。对了,$d-&gt;filter_id怎么可能同时等于34?!?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-08
相关资源
最近更新 更多