我有一个包含数千种产品的产品表。有些产品有不同的颜色可供选择。但是,当有人搜索“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和jave用于创建结果。
答案 0 :(得分: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
答案 1 :(得分:0)
它会像
SELECT TOP 1 (*) FROM table
WHERE PRODUCT_NAME LIKE 'mp3 player %'
ORDER BY SALE_COUNT DESC
所以,我们只选择排序最高的行,按SALE_COUNT降序排列(以便最高销售额在最高位置)
答案 2 :(得分:0)
SELECT *
FROM products
WHERE product_name LIKE 'mp3 player%'
ORDER BY
sale_count DESC
LIMIT 1