我有一个包含数千种产品的产品表。有些产品在不同的颜色可供选择。但是,当有人如“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播放器红色的”我想给他看,而不是一个黑红色的球员。使用“喜欢”操作执行搜索(啊,我知道lucene的,无论如何,我需要解决这一点)。

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

PostgreSQL的db和java的用于创建的结果。

有帮助吗?

解决方案

只是由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

其他提示

SELECT  *
FROM    products
WHERE   product_name LIKE 'mp3 player%'
ORDER BY
        sale_count DESC
LIMIT 1

它将会像

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

所以,我们只选择最上面一行,有序,由SALE_COUNT降(这样最高的销售数量在顶部)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top