使用CASE构建SQL WHERE子句

时间:2013-06-09 12:25:21

标签: php sql case where

注意:已更新,因为我认为我需要使用与CASE类似的内容

我有一个有3个地址输入的表单:

  1. 市郊
  2. 邮编
  3. 国家
  4. 我想使用这3个表单字段来填充sql查询的where子句(参见下文)。

    1. 因此,如果没有输入输入字段,则没有where子句(并且所有行都被提取)
    2. 如果输入了一个或多个输入字段,则使用输入的PHP变量构建where子句。

      $sql = <<<SQL
      SELECT 
      cs.customerRefId,
      cc.firstName,
      cc.lastName,
      cc.email,
      cc.phone,
      cc.mobile,
      cs.seekingAddressSuburb, 
      cs.seekingAddressPostcode, 
      cs.seekingAddressState
      FROM 
      customer_seeking cs
      LEFT JOIN
      customer_contact cc ON cc.customerRefId = cs.customerRefId
      WHERE
      cs.seekingAddressSuburb = $suburb
      cs.seekingAddressPostcode = $postcode
      cs.seekingAddressState = $state
      SQL;
      

1 个答案:

答案 0 :(得分:0)

我认为这是用PHP脚本编写的,如果它应该适合你:

$sql = "SELECT 
cs.customerRefId,
cc.firstName,
cc.lastName,
cc.email,
cc.phone,
cc.mobile,
cs.seekingAddressSuburb, 
cs.seekingAddressPostcode, 
cs.seekingAddressState
FROM 
customer_seeking cs
LEFT JOIN
customer_contact cc ON cc.customerRefId = cs.customerRefId";
//isset checks to see if the variable has a value set at all
if(isset($suburb) or isset($postcode) or isset($state)){
    $sql .= " WHERE ";
    if(isset($suburb)){ $sql .= " cs.seekingAddressSuburb = $suburb ";}
    if(isset($postcode)){ $sql .= " cs.seekingAddressPostcode = $postcode ";}
    if(isset($state)){ $sql .= " cs.seekingAddressState = $state ";}
}

如果您之前已经为这些变量设置了值,还有其他方法。 重置它们unset($suburb)或者如果它们设置为默认值,请检查它们是否不再等于默认值$suburb = '' ... if($suburb != '' or ...。如果您希望我进一步解释这两个问题,请告诉我。

参考:

- PHP isset

- PHP unset