2012-07-04 64 views
1

好的 - 在这里需要一些帮助 - 可能比我能在这里嚼的更多 - 但我正在寻找一个总是返回至少10个结果的SQL查询。如果应用了第一个条件并且结果集超过了10个结果,则继续下一个条件等。SQL - 筛选搜索结果

示例 查找所有价格低于5.00英镑的小型红色塑料玩具车。

我总是希望在屏幕上显示至少10个项目。要搜索“小”,然后在“红色”,然后在“<£5.00”。如果查询返回超过10个项目,则继续过滤尽可能多的标签(即塑料,玩具和汽车) - 更多的匹配可以使其排名越高(例如,如果产品有3个标签都与它 - 它会在列表的顶部,如果一个产品只符合1个标签 - 那么这将是在列表中向下低

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 

相当长的例子 - 但我希望你明白了我。想知道是否将所有过滤器放在标签表内 - 即价格,颜色和尺寸是否有任何好处,然后只需要对标签表进行搜索就可以。

任何想法的人?

谢谢

回答

1

这取决于你的用法:过滤整数比字符串(顺便说一句,他们索引?),但JOIN也是费时。因此,如果sql以外的代码与整数一起工作,请保留它们(如果不需要显示文本,请不要加入)