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 播放器红色”时,我想向他展示红色播放器,而不是黑色播放器。使用“like”运算符执行搜索(是的,我知道 lucene,无论如何我需要解决这个问题)。

任何建议如何解决这个问题?我有一些想法,但似乎都不是一个好的解决方案。谢谢,

postgreSQL db 和 jave 用于创建结果。

4

3 回答 3

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 注入攻击来清理搜索参数。

编辑:

如果您使用的是 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 回答