2009-07-29 96 views
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播放器紅色的」我想給他看,而不是一個黑紅色的球員。搜索是使用'喜歡'運算符(是的,我知道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注入攻擊的第一消毒搜索參數。

編輯:

如果你使用的是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 2009-07-29 12:13:50

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