-1

約7つの入力があるフォームがあり、ユーザーが選択した基準に従って検索できるようにしたいと考えています。

たとえば、入力名は次のようになります。

  • 名前
  • 性別
  • 登録日

しかし、私のユーザーは最初の 3 つだけを選択したいので、SQL クエリは次のようになります。

SELECT * FROM table WHERE name='.$name.' AND age= '.$age.' AND gender = '.$gender.'

この作業はクールですが、MVC アーキテクチャを使用してユーザー入力に基づいて常に異なる SQL クエリを作成する方法の問題に直面しています。

私のアイデアは次のようなものでした:

// Syntax is from Nette Framework so please don't care about it, I basicly need logic for it in MVC

public function findMatch($name= NULL, $age= NULL, $gender = NULL)
{
    $selection = $this->database->table('table');
    if ($name) {
        $selection = $selection->where('name', $name);
    }
    if ($age) {
        $selection = $selection->where('age', $age);
    }
    if ($gender) {
        $selection = $selection->where('gender', $gender);
    }
    return $selection;
}

ただし、これは「AND」ではなく「OR」選択でのみ役立ちます。誰かがこれを解決する方法を理解するのを手伝ってくれますか?

4

1 に答える 1

3

SQL SELECT単一のステートメントを検討している場合は、次のことを試してみてください。

SELECT *
    FROM Table T
    WHERE (@name IS NULL OR T.Name LIKE '%' + @name + '%')
        AND (@age IS NULL OR T.Age = @age)
        ...

これは、指定された基準に基づいて検索します。基本的に、WHERE条項では、次のことがわかります。

もしそう@nameならNULL

  • 任意の名前のすべてのレコードが表示されます
  • それ以外の場合は、同様の名前の値のみを返します
于 2015-08-03T09:50:40.190 に答える