2009-07-29 2 views
1

수천 개의 제품이 포함 된 제품 테이블이 있습니다. 일부 제품은 다른 색상으로 제공됩니다. 그러나 누군가가 예를 들어 'mp3 player'를 검색 할 때 나는 그에게 모든 색을 보여주고 싶지 않고 가장 잘 팔리는 색을 가진 플레이어만을 보여주고 싶습니다.이 예제에서 검색 결과를 필터링하는 방법

는 그녀의 테이블 레이아웃 (간체)입니다 :

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 결과를 만드는 데 사용됩니다.

답변

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 주입 공격을 제거하여 먼저 검색 매개 변수를 소독해야합니다.

편집 : 당신은 포스트 그레스를 사용하는 경우

, 구문 때문에, 마지막에 "N LIMIT의"를 넣어하는 것입니다

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

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