2016-09-04 9 views
0

この複数のセレクタを1つに結合する方法がわかりません。どんな助け?Mysqlの複数セレクタ

すでにクローズアップUNITを試していますが、エーテルは動作しません。それは使用HTML(+ php)の形で目的をフィルタリングするためのものである:として

<input type="text" name="town_from">

テキスト値を入力します。それらは別々にはうまく機能しますが、同時に両方では機能しません

$sql_1 = "SELECT * FROM ship_db WHERE town_from = '$town_from' AND town_to = '$town_to' ORDER BY top DESC, date_time_of_insert DESC"; 

$sql_2 = "SELECT * FROM ship_db WHERE price BETWEEN '$price_from' AND '$price_to' ORDER BY top DESC, date_time_of_insert DESC"; 

答えて

0

これは必要なものですか?

SELECT s.* 
FROM ship_db s 
WHERE (s.town_from = '$town_from' AND s.town_to = '$town_to') OR 
     (s.price BETWEEN '$price_from' AND '$price_to') 
ORDER BY s.top DESC, s.date_time_of_insert DESC; 

注:

  • 私はあなたが(それゆえOR)のいずれかの条件に一致する行をしたいと仮定しています。両方が必要な場合は、ANDを使用してください。
  • パラメータ化クエリを使用する必要があります。つまり、ユーザーの入力を直接クエリーに入れないでください。
  • おそらく、priceは数字です。数字と数値を比較し、一重引用符を使用しないでください(もちろん、これはパラメータを使用しても固定されます)。
+0

まさに、ちょうど変更またはをします。ありがとう、これは私の終日の闘いでした! –

0

where句を組み合わせることはできませんか?

"SELECT * FROM ship_db 
    WHERE town_from = '$town_from' AND town_to = '$town_to' 
    AND price BETWEEN '$price_from' AND '$price_to' 
    ORDER BY top DESC, date_time_of_insert DESC"; 

またはあなたが動的に何かそれを構築しようとすることができ:

$sql = "SELECT * FROM ship_db "; 
if(isset($town_from) && isset($town_from)){ 
    $where = "WHERE town_from = '$town_from' AND town_to = '$town_to'"; 
} 
if(isset($price_from) && isset($price_to)){ 
    if(isset($where)){ 
    $where += " AND price BETWEEN '$price_from' AND '$price_to'"; 
    }else{ 
    $where = "WHERE price BETWEEN '$price_from' AND '$price_to'"; 
    } 

} 

$sql += $where; 
$sql += " ORDER BY top DESC, date_time_of_insert DESC"; 
+0

この非動的クエリは機能しませんでした。私は前にそれを試しています。それは、第一条件または第二条件だけを選択していた。両方ではない。 –