繁体   English   中英

我如何在多个if语句中使用SQL where子句

[英]How can i use SQL where clause with multiple if statements

我在SQL查询中有多个if条件以及多个where子句。

if(empty($pincode) && !empty($data) && $flag==true ) {    
                 $dql = "SELECT s.instaffiliation,i.institutename,i.institutefeerange,i.instituterating,
                 a.addressline1,a.addressline2,i.instituterating,
                 i.instituteteachingtimings,s.instdescription,s.insttype,
                 s.insteligibilitycriteria,u.instlogo,u.instbrochure
                 FROM Edufaction\Bundle\EdufactionBundle\Entity\Institute i 
                 INNER JOIN i.instsummary s
                 INNER JOIN i.address a
                 INNER JOIN i.insturl u 
                 WHERE s.instaffiliation IN('')      
                 ORDER BY i.instituterating";       
       }
if(empty($pincode) && !empty($data) && $flag==false) {
                 $dql = "SELECT s.instaffiliation,i.institutename,i.institutefeerange,i.instituterating,
                 a.addressline1,a.addressline2,i.instituterating,
                 i.instituteteachingtimings,s.instdescription,s.insttype,
                 s.insteligibilitycriteria,u.instlogo,u.instbrochure
                 FROM Edufaction\Bundle\EdufactionBundle\Entity\Institute i 
                 INNER JOIN i.instsummary s
                 INNER JOIN i.address a
                 INNER JOIN i.insturl u 
                 WHERE s.instaffiliation IN($data)    
                 ORDER BY i.instituterating";         
       }
if(!empty($pincode) && !empty($data)) {
                $dql = "SELECT s.instaffiliation,i.institutename,i.institutefeerange,i.instituterating,
                 a.addressline1,a.addressline2,i.instituterating,
                 i.instituteteachingtimings,s.instdescription,s.insttype,
                 s.insteligibilitycriteria,u.instlogo,u.instbrochure
                 FROM Edufaction\Bundle\EdufactionBundle\Entity\Institute i 
                 INNER JOIN i.instsummary s
                 INNER JOIN i.address a
                 INNER JOIN i.insturl u 
                 WHERE s.instaffiliation IN($data)   
                 AND a.pincode IN($pincode)    
                 ORDER BY i.instituterating";                     
     }                     
if(!empty($data) && !empty($reqfee) && $flag==false) {
                 $dql = "SELECT s.instaffiliation,i.institutename,i.institutefeerange,i.instituterating,
                 a.addressline1,a.addressline2,i.instituterating,
                 i.instituteteachingtimings,s.instdescription,s.insttype,
                 s.insteligibilitycriteria,u.instlogo,u.instbrochure
                 FROM Edufaction\Bundle\EdufactionBundle\Entity\Institute i 
                 INNER JOIN i.instsummary s
                 INNER JOIN i.address a
                 INNER JOIN i.insturl u 
                 WHERE s.instaffiliation IN($data) 
                 AND i.institutefeerange IN($reqfee)   
                 ORDER BY i.instituterating";        
       }

这里的查询与基于多个if条件的多where条件相同。 我如何使用if条件一次应用带有多个where子句的单个查询。 请任何人帮助我。 谢谢前进

因此,看来您只是在尝试简化代码。 如果是这种情况,则可以使用简单的字符串连接来完成,但实际上不能使用sql注入。 字段和联接的主要列表都是相同的,顺序也是如此。 因此,将查询的第一部分构建到字符串中,直到where子句为止。

$dql = "SELECT 
              s.instaffiliation, i.institutename, i.institutefeerange,
              i.instituterating, a.addressline1, a.addressline2, 
              i.instituterating, i.instituteteachingtimings, s.instdescription, 
              s.insttype, s.insteligibilitycriteria, u.instlogo, u.instbrochure
          FROM 
              Edufaction\Bundle\EdufactionBundle\Entity\Institute i
                 INNER JOIN i.instsummary s
                 INNER JOIN i.address a
                 INNER JOIN i.insturl u
          WHERE ";

现在,根据特定的合格条件添加条件

if(empty($pincode) && !empty($data) && $flag==true )
{
   $dql = $dql + "s.instaffiliation IN('') ";
}
if(empty($pincode) && !empty($data) && $flag==false) 
{
   $dql = $dql + "s.instaffiliation IN($data)";
}
if(!empty($pincode) && !empty($data)) 
{
   $dql = $dql + "s.instaffiliation IN($data)   
                 AND a.pincode IN($pincode) ";
}
if(!empty($data) && !empty($reqfee) && $flag==false) 
{
   $dql = $dql + "s.instaffiliation IN($data) 
                 AND i.institutefeerange IN($reqfee) "; 
}

最后,添加order by子句

$dql = $dql + "ORDER BY i.instituterating";        

这是否更接近您要在代码中简化的内容?

$query_string = "SELECT rows FROM table INNER JOIN ";

// Here you validate your variables and build your correct WHERE clause

if(empty($pincode) && !empty($data) && $flag==true ) {
    $query_string .= " WHERE s.instaffiliation IN('') ";
}

// and so on for every case

$query_string .= "ORDER BY row ASC ";

// Now you will have a sigle correct query string

暂无
暂无

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

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