1

何千もの商品を含む商品テーブルがあります。一部の製品は異なる色でご利用いただけます。しかし、誰かがたとえば「mp3プレーヤー」を検索するとき、私は彼にすべての色を表示したくはありません。代わりに、最も売れている色のプレーヤーだけを表示します。

彼女はテーブルレイアウトです(簡略化):

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 player red」を検索するとき、私は彼に黒いプレーヤーの代わりに赤いプレーヤーを見せたいと思います。検索は「like」演算子を使用して実行されます(ええ、私はluceneを知っています、とにかくこれを解決する必要があります)。

この問題を解決する方法について何か提案はありますか?私にはいくつかのアイデアがありますが、どれも良い解決策ではないようです。ありがとう、

postgreSQL dbおよびjaveは、結果を作成するために使用されます。

4

3 に答える 3

2

問題を理解している場合は、SALE_COUNTの降順で並べ替え、最初の1つだけを選択してください。

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

考えられるSQLインジェクション攻撃をすべて削除して、最初に検索パラメータをサニタイズしてください。

編集:

postgresを使用している場合、構文は最後に「LIMIT n」を付けることになるため、次のようになります。

SELECT ID, PRODUCT_NAME, COLOR, SALE_COUNT
FROM table
WHERE PRODUCT_NAME LIKE '%' + @searchParam + '%'
ORDER BY SALE_COUNT DESC
LIMIT 1
于 2009-07-29T12:11:43.360 に答える
0

それは次のようなものになります

SELECT TOP 1 (*) FROM table
WHERE PRODUCT_NAME LIKE 'mp3 player %' 
ORDER BY SALE_COUNT DESC

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

于 2009-07-29T12:12:05.797 に答える
0
SELECT  *
FROM    products
WHERE   product_name LIKE 'mp3 player%'
ORDER BY
        sale_count DESC
LIMIT 1
于 2009-07-29T12:12:35.267 に答える