如何使用多个WHERE子句执行MySQL查询?

时间:2011-02-23 15:39:01

标签: php mysql where-clause

如何进行mysql查询,用户可以从多个选项中进行选择。 Fox示例我有一个用户可以用来搜索房屋的表格。现在我有一个选择框,您可以选择是否需要房屋,公寓或其他任何东西。然后我有第二个盒子,你可以选择你想要的房子或公寓所在的城市。也许还有另一个最高价格的房子。

现在你将如何进行mysql查询?我的问题是,我会这样做: if($ _ POST [“house_type”]!= 0){ $ select = mysql_query(“SELECT * FROM WHERE type ='”。$ _ POST [“house_type”]。“'”); } 但现在我只有一个人选择了房屋类型但没有其他选择的情况。那么我是否必须为所选元素的每种可能组合做一个“if”?

强调我的问题:

if(!isset($_POST["house_type"])) {

            if($_POST["something"] == 0) {
        $search_select = @mysql_query("SELECT * FROM housedata WHERE something = $_POST["whatever"]);

            }
            elseif($_POST["something"] != 0) {
        $search_select = @mysql_query("SELECT * FROM housedata  something = $_POST["whatever"] AND somethingelse = 'whatever');
            }
        }



elseif(!isset($_POST["house_type"])) {


        if($_POST["something"] == 0) {
        $search_select = @mysql_query("SELECT * FROM housedata WHERE something = $_POST["whatever"]);

            }
            elseif($_POST["something"] != 0) {
        $search_select = @mysql_query("SELECT * FROM housedata  something = $_POST["whatever"] AND somethingelse = 'whatever');
            }
        }

现在想象我有10或20个不同的选择框,输入字段和复选框,我将不得不做一个mysql查询取决于这些框和fiels和复选框填充。这将是一个非常复杂,缓慢和可怕的代码。那么是否有可能进行如下的mysql查询:

SELECT * FROM whatever WHERE house_data = '".$whatever."' AND (if(isset($_POST["something"])) { whatever = '".$whatever2."' } AND ...;

你理解我的意思?解释起来有点复杂,但实际上它是一个非常重要的问题,可能很容易回答。

感谢您的帮助! phpheini

5 个答案:

答案 0 :(得分:4)

在运行SQL之前生成WHERE子句。

一个简短的例子:

$whereClause = "";

if ($_POST['opt1']) {
    $opt1 = mysql_real_escape_string($_POST['opt1']);
    $whereClause .= "AND opt1='$opt1'";
}

if ($_POST['opt2']) {
    $opt2 = mysql_real_escape_string($_POST['opt2']);
    $whereClause .= "AND opt2='$opt2'";
}

mysql_query("SELECT * FROM table WHERE 1 ".$whereClause); 

答案 1 :(得分:1)

要指出你正确的方向,尝试这样的事情:

if(isset($_POST["something"]))
{
    $where = " AND whatever = '".$whatever2."'";
}
else    $where = '';

mysql_query("SELECT * FROM whatever WHERE house_data = '".$whatever."'".$where);

答案 2 :(得分:1)

$where = array();
if($_POST["something"]) {
    $where[]  = " something =".$_POST["something"];
}
if($_POST["something2"]) {
   $where[]  = " something2=".$_POST["something2"];
}
.
.
.
//build where string
$where_ = !(empty($where) ? " WHERE ".implode(" AND ",$where) : "";
//build sql
$sql = "SELECT * ... ".$where;

答案 3 :(得分:0)

编写一些简单的查询构建器

$where = array();
if($_POST["something"]) {


$where[]  = sprintf(" something='%s'",$_POST["something"]);

// sprintf - 防止SQL注入     }

if($_POST["something2"]) {


$where[]  = sprintf(" something2='%s'",$_POST["something2"]);
}
//build where string
$where_str = " WHERE ".implode(" AND ",$where);
//build sql
$sql = "SELECT * ... $where_str";

答案 4 :(得分:0)

您需要单独构建搜索字符串,但格式只是

SELECT * FROM your_table WHERE number = {$number} AND sentence = '{$sentence}';

由于您是基于PHP逻辑创建搜索词,请执行以下操作:

$search = "SELECT * FROM your_table WHERE ";
if(isset($whatever)) $search .= "something = '{$whatever}'";
if(isset($whateverelse)) $search .= " AND somethingelse = '{$whateverelse}'";
$search_select = mysql_query($search);