2012-07-04 3 views
1

OK - besoin d'aide ici - aurait pu mordre plus que je ne peux mâcher ici - mais je cherche à écrire une requête SQL qui renvoie toujours un minimum de 10 résultats. Si la première condition est appliquée et que le résultat est supérieur à 10 résultats, passez à la condition suivante, etc.SQL - Filtrer les résultats de recherche

Exemple Trouvez toutes les petites voitures jouets en plastique rouge qui coûtent moins de 5,00 €.

Je veux toujours afficher un minimum de 10 éléments à l'écran. Vous voulez rechercher sur "petit" puis sur "rouge", puis sur "< £ 5,00". Si la requête renvoie plus de 10 éléments, continuez à filtrer autant de tags que possible (plastique, jouet et voiture). Plus le nombre de correspondances est élevé, plus elle doit être classée (c.-à-d. - il sera en haut de la liste, si un produit correspond à seulement 1 étiquette -. alors ce sera plus bas la liste

Price Table 
ID  Price 
1  £1.50 
2  £2.50 
3  £6.00 
. 
Colour Table 
ID  Colour 
1  Red 
2  Blue 
3  Yellow 
. 
Size Table 
ID  Shape 
1  Small 
2  Medium 
3  Large 
. 
Products Table 
ID Description price_id  colour_id size_id 
1 Item 1   1   2   2 
2 Item 2   2   2   1 
3 Item 3   1   1   1 
4 Item 4   3   2   3 
5 Item 5   3   1   2 
6 Item 6   1   1   2 
7 Item 7   1   1   3 

. 
Tags Table 
ID  Description 
1 Shiny 
2 Plastic 
3 Wood 
4 Toy 
5 Disney 
6 Animal 
7 Car 
. 
Items_Tags Table 
ID  tag_id  product_id 
1  1   1 
2  4   1 
3  7   1 
4  2   2 
5  3   3 
6  4   3 
7  7   6 
8  7   7 
9  7   2 

un certain exemple à long - mais j'espère que vous obtenez le point I. se sont demandé s'il y aurait tout avantage à mettre tous les filtres dans le tableau des balises -.?-à-dire le prix, la couleur et la taille et serait alors que de rechercher sur la table tags

toute personne idées

Merci

Répondre

1

Cela dépend de votre utilisation: Filtrer les entiers est plus rapide que la chaîne (au fait, sont-ils indexés?) Mais JOIN prend également du temps. Donc, si le code en dehors du sql fonctionne avec les entiers, conservez-les (et ne les joignez pas si vous n'avez pas besoin d'afficher le texte)

Questions connexes