簡體   English   中英

如何執行多個WHERE子句的MySQL查詢?

[英]How can execute a MySQL query with multiple WHERE-clauses?

您將如何執行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查詢。 這將是極其復雜,緩慢且可怕的代碼。 所以有可能使像這樣的mysql查詢:

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

你明白我的意思嗎? 解釋起來有點復雜,但實際上它是一個非常重要的問題,可能很容易回答。

謝謝您的幫助! phpheini

在運行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); 
$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;

為了使您向正確的方向稍微走一點,請嘗試如下操作:

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

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

寫一些簡單的查詢生成器

$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";

您需要分別構建搜索字符串,但是格式很簡單

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM