2009-07-29 9 views
1

J'ai une table de produits qui contient des milliers de produits. Certains produits sont disponibles en différentes couleurs. Mais quand quelqu'un recherche par exemple "lecteur mp3" je ne veux pas lui montrer toutes les couleurs, mais plutôt le joueur avec la couleur la plus vendue.Comment filtrer les résultats de recherche dans cet exemple

Son est la disposition de la table (simplifiée):

ID | PRODUCT_NAME  | COLOR | SALE_COUNT 
=========================================== 
1 | Mp3 player red | red | 2 
2 | Mp3 player gold | gold | 1 
3 | Mp3 player black | black | 100 

Mais, lorsqu'un utilisateur recherche pour « lecteur Mp3 rouge » je veux lui montrer le joueur rouge, au lieu du noir. La recherche est effectuée en utilisant l'opérateur 'like' (ouais, je sais lucene, de toute façon j'ai besoin de résoudre ceci).

Des suggestions pour résoudre ce problème? J'ai quelques idées mais aucune d'entre elles ne semble être une bonne solution. merci,

postgreSQL db et jave sont utilisés pour créer le résultat.

Répondre

2

ordre juste par le SALE_COUNT descendant et sélectionnez uniquement le premier, si je comprends bien votre problème:

SELECT TOP 1 ID, PRODUCT_NAME, COLOR, SALE_COUNT 
FROM table 
WHERE PRODUCT_NAME LIKE '%' + @searchParam + '%' 
ORDER BY SALE_COUNT DESC 

Assurez-vous de désinfecter le paramètre de recherche d'abord par la suppression des attaques par injection SQL possibles.

EDIT:

Si vous utilisez Postgres, la syntaxe est de mettre un "LIMIT n" à la fin, donc:

SELECT ID, PRODUCT_NAME, COLOR, SALE_COUNT 
FROM table 
WHERE PRODUCT_NAME LIKE '%' + @searchParam + '%' 
ORDER BY SALE_COUNT DESC 
LIMIT 1 
0

ce sera quelque chose comme

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

Donc, nous ne sélectionnons que la ligne du haut, ordonnée, descendante de SALE_COUNT (de sorte que le nombre de ventes le plus élevé est en haut)

+0

... je suppose que ma réponse était 25 secondes trop tard mdr – Alex

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