簡體   English   中英

子查詢 MY SQL

[英]subquery MY SQL

我正在我的網站上做一個搜索器,我需要在我的選擇查詢中包含我需要的所有約束。

在我的搜索器中,用戶可以寫一個關鍵字,寫一個最低價格和一個最高價格,並在某些類別之間進行選擇,但沒有必要通過填寫所有字段來找到結果,作為用戶,您必須能夠找到通過填充所有內容或僅填充其中一個,所以我必須做一個約束來分離它。

我正在嘗試類似的東西:

$var1 = $_POST['var1']; //name - type = text
$var2 = $_POST['var2']; //min price - type = integer
$var3 = $_POST['var3']; //max price - type = integer
$var4 = $_POST['var4']; //array of categories

$select_query = "SELECT * FROM objects WHERE x=1";

if($var1 != NULL || $var1 != ''){
"AND name like '%$var1%'"
}

if(($var2 != NULL || $var2 != '') AND ($var3 != NULL || $var3 != '')){
"AND price=>$var2 AND price =>$var3'"
}

這里我有一個額外的問題,因為我想返回用戶選擇的任何類別,所以首先它必須是一個 AND 才能繼續查詢,但它必須是一個 OR,在類別之間,問題是最后一個將失敗。

    if($var4 != NULL || $var4 != ''){
      " AND(";
         foreach $var4 as $cat){
         "id_category = $cat OR";
         }
      ")";
    }

任何提示? 謝謝!

嘗試使用 PHP 的 implode 函數:

" AND(" . implode("OR ", $var4) . ")"

您需要確保 $var 是非空數組。

另外,請閱讀 SQL 注入以及如何使用 PHP 正確轉義 SQL 查詢,以便與數據庫交互的代碼是安全的:

http://php.net/manual/en/security.database.sql-injection.php

http://php.net/manual/en/pdo.prepared-statements.php

謝謝,但我做錯了查詢!

解決方案是:

$select_query = "SELECT * FROM objects WHERE x=1";

if($var1 != NULL || $var1 != ''){
$select_query = "AND name like '%$var1%'"
}

我用 for 做了最后一個例子。

謝謝你們!

暫無
暫無

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

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