1

ユーザーからのフィルター入力に基づいてデータベースを照会するphpスクリプトを作成しようとしています

だから本質的に私は欲しい

select * from table where parent_id = '$filter_value'

ただし、デフォルト値を$ filter_valueに適用したいのですが、これはユーザーがフィルターを指定しない場合に有効になり、考えられるすべての結果が表示されます。

*を使ってみましたが、うまくいきませんでした...

4

4 に答える 4

3

ふたつのやり方:

  1. 値をNULLと比較します

    SELECT * 
    FROM table
    WHERE ($filter_value IS NULL OR parent_id = '$filter_value')
    
  2. $ filter_valueに値が含まれているかどうかに基づいて、SQLを動的に作成します。そうでない場合、クエリは次のようになります。

    SELECT *
    FROM table
    
于 2012-10-14T23:59:25.787 に答える
2

フィルタ変数がnullかどうかを確認するか、クエリをifステートメントでラップします。

SELECT * FROM baz WHERE foo = :bar OR :bar IS NULL
于 2012-10-14T23:58:25.943 に答える
1

それはあなたが尋ねたものとは正確には異なりますが、それは非常に近く、私はより良い方法だと思います。あなたはこのようなことをすることができます:

if ( empty( $filter_value ) === false ) {
    select * from table where parent_id = '$filter_value'
} else {
    select * from table
}

これは単なる例であり、適切なphp構文ではありません。

しかし、アイデアは、何かに応じて異なる動作をしたい場合は、そのようにプログラムする必要があるということです。たとえば、if、そのように、それぞれの場合に何が起こるかを知っており、状況に依存せずに状況を制御します。 mysqlは渡された空の値を処理します。

于 2012-10-15T00:57:22.747 に答える
0

OK、デフォルトの変数値として空白を挿入してみました

$filter_value = ''

問題を解決しました:$

于 2012-10-14T23:57:37.177 に答える