2011-12-23 10 views
1

私は実際の解決策がありますが、同じ結果を得るためのより良い方法があるかどうかは疑問でした。何も指定されていない場合、指定されたパラメータまたは空白でクエリをフィルタリングします。

シナリオ:

ユーザー・インターフェースは、GUIDに解決検索フィルタを持っています。したがって、顧客John Doeに関連するすべてのレコードを検索する場合は、John Doeを入力し、最後のクエリが実行される前にJohn DoeがJohn Doeのcustomer_idに解決されます。 CUSTOMER_IDがXYZ-456であれば、クエリは次のようになります。

SELECT id AS item_id FROM items WHERE items.customer_id = 'XYZ-456'; 

そして、これは完全な検索結果をユーザに提供するために、別のプロセスを経ることになるアイテムIDを返します。

しかし明らかに、ユーザーはフィルタを選択しないことがあります。

何も指定されていない場合
SELECT id AS item_id FROM items WHERE items.customer_id LIKE '%$customer_id%'; 

だから、それが解決へ:

すべての項目を返します
SELECT id AS item_id FROM items WHERE items.customer_id LIKE '%%'; 

(望ましい結果全体WHEREパラメータを挿入するのではなく、私は以下の溶液を用いて行ってきました)。

実際にはうまくいきますが、技術的には常に技術的に以下のcustomer_ids XYZ-456EXYZ-4567の理論上の問題です.2つのidのうち短い方が両方のcustomer_idsの項目を返します。

「正しい結果を返すにはfield = 'X'ですが、 'X'が空白の場合は何も返しません。

+0

だけ知っている:あなたはプログラミング言語でこれをしない理由はどのような理由があるの? –

+0

どの部分をしますか?条件文で句を書いてください。私はできるだけ多くのコード、DBまたはプログラミングを最小化することを好むので。基本的には、コードで年を派生させて渡すのではなく、YEAR()のようなMySQL関数を使用するのと同じ理由です.DBはそれを行うことができ、何か問題があるかどうかを知るので、phpとmysqlやっていない。 – Anthony

答えて

2
where items.customer_id = '$customer_id' or '$customer_id' = '' 

ロジックは、複数のオプションの条件でフィルタリングするときにもうまく機能します。

編集 - 同様

where '$customer_id' in (items.customer_id, '') 
+0

よかった。空白は空白になります。私はそれを試してみましょう。 – Anthony

+0

パーフェクト。これはまさにシンプルですが、私が必要とした創造的なリーチの外にあります。ありがとう。 – Anthony

+0

Lol nice one :) –

1

PHPでこれを解決するのは理論的には楽しいからです。

SELECT id AS item_id FROM items WHERE items.customer_id LIKE IF("$customer_id" = "", "%%", "$customer_id"); 

これはうまくいかないが、私は非常に興味がある。

+0

+1のために働いているテストされていないアイデアを投げ捨てる。私は答えを得るためにクリスと一緒に行くつもりです。なぜなら彼は関数を使う必要がないからです(そして、より多くのクロスdbを信頼できるはずです)。あなたの考えはしっかりしていて、それは私の心を横切らないことにも驚いています。ありがとう。 – Anthony

関連する問題