2009-07-29 16 views
1

私は何千もの製品を含む製品表を持っています。いくつかの製品は、異なる色で利用可能です。しかし、誰かが "mp3 player"の例を検索すると、私は彼にすべての色を表示するのではなく、最高の販売色を持つプレイヤーだけを表示したいと思います。この例の検索結果をフィルタリングする方法

彼女はテーブルのレイアウト(簡体字)である:

ID | PRODUCT_NAME  | COLOR | SALE_COUNT 
=========================================== 
1 | Mp3 player red | red | 2 
2 | Mp3 player gold | gold | 1 
3 | Mp3 player black | black | 100 

しかし、ときにユーザーを検索「赤いMP3プレーヤー」のは、私は彼の代わりに黒1の赤のプレイヤーを、表示したいです。検索は 'like'演算子(ええ、私はluceneを知っている、とにかく私はこれを解決する必要がある)を使用して実行されます。

この問題の解決方法を教えてください。私はいくつかのアイデアを持っていますが、どれも良い解決策ではないようです。 ありがとう、

postgreSQL dbとjaveを使用して結果を作成します。

答えて

2
SALE_COUNTの降順で

だけのため、私はあなたの問題を理解している場合、最初のものだけを選択します。

SELECT TOP 1 ID, PRODUCT_NAME, COLOR, SALE_COUNT 
FROM table 
WHERE PRODUCT_NAME LIKE '%' + @searchParam + '%' 
ORDER BY SALE_COUNT DESC 

は、すべての可能なSQLインジェクション攻撃を除去することにより、最初の検索パラメータをサニタイズしてください。

EDIT:あなたはpostgresのを使用している場合

、構文はそう、最後に "LIMIT n" を置くことです:

SELECT ID, PRODUCT_NAME, COLOR, SALE_COUNT 
FROM table 
WHERE PRODUCT_NAME LIKE '%' + @searchParam + '%' 
ORDER BY SALE_COUNT DESC 
LIMIT 1 
0

それは

SELECT TOP 1 (*) FROM table 
WHERE PRODUCT_NAME LIKE 'mp3 player %' 
ORDER BY SALE_COUNT DESC 
のようなものになります

したがって、最上位の行のみを選択し、SALE_COUNTで降順に並べ替えています(最高の販売数が上になるように)

+0

...私の答えは25秒遅すぎたと思う笑 – Alex

0
SELECT * 
FROM products 
WHERE product_name LIKE 'mp3 player%' 
ORDER BY 
     sale_count DESC 
LIMIT 1 
関連する問題