SQL - 过滤搜索结果

时间:2012-07-04 14:11:38

标签: php mysql cakephp search filter

好的 - 在这里需要一些帮助 - 可能比我在这里咀嚼更多 - 但是我想写一个总是返回最少10个结果的SQL查询。如果应用第一个条件且结果集超过10个结果,则继续进行下一个条件等。

实施例 找到所有价格低于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 个答案:

答案 0 :(得分:1)

这取决于你的用法:过滤整数比字符串快(顺便说一下,它们是否被编入索引?)但是JOIN也很耗时。因此,如果sql外部的代码使用整数,请保留它们(如果不需要显示文本,则不要加入)