SQL - 筛选搜索结果


SQL - Filtering search results

好的 - 在这里需要一些帮助 - 可能已经咬掉了比我在这里咀嚼的更多 - 但我希望编写一个始终返回至少 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

一个很长的例子 - 但我希望你明白这一点。 我想知道将所有过滤器放在标签表中是否有任何好处 - 即价格、颜色和尺寸,然后只需要搜索标签表。

有人有什么想法吗?

谢谢

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