简体   繁体   English

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

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

I have multiple if conditions with multiple where clauses is there at SQL queries. 我在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";        
       }

Here query is same with multiple where conditions based on multiple if conditions. 这里的查询与基于多个if条件的多where条件相同。 How can i apply single query with multiple where clauses at a time using if conditions. 我如何使用if条件一次应用带有多个where子句的单个查询。 Please help me anyone. 请任何人帮助我。 Thanks for advance 谢谢前进

So it looks like you are just trying to simplify the code. 因此,看来您只是在尝试简化代码。 If that is the case, you can do with simple concatenate of strings, but not really an exposure to sql injection. 如果是这种情况,则可以使用简单的字符串连接来完成,但实际上不能使用sql注入。 The primary list of fields and joins is all the same and so is the order by. 字段和联接的主要列表都是相同的,顺序也是如此。 So build the first part of the query into the string up to the where clause. 因此,将查询的第一部分构建到字符串中,直到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 ";

NOW, add the where criteria per the specific qualifying condition 现在,根据特定的合格条件添加条件

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) "; 
}

AND finally, tack on the order by clause 最后,添加order by子句

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

Is this closer to what you are trying to simplify in your code? 这是否更接近您要在代码中简化的内容?

$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