【发布时间】:2011-01-14 00:45:30
【问题描述】:
对于这个问题,我想看看是否有人对如何实施我目前计划实施的内容有更好的了解(如下):
我正在使用数据库跟踪一组图像。每张图片由一行表示。
我希望能够使用许多不同的搜索参数来搜索图像。这些参数之一涉及按颜色搜索选项。 (其余的搜索内容目前工作正常。)
此数据库中的图像最多可以包含七种颜色:
-红色
-橙色
-黄色
-绿色
-蓝色
-靛蓝
-紫罗兰
以下是一些示例用户查询:
“我想要一张包含红色的图片。”
“我想要一张包含红色和蓝色的图像。”
“我想要一张包含黄色和紫色的图像。”
“我想要一张包含红色、橙色、黄色、绿色、蓝色、靛蓝和紫色的图像。”
等等。用户通过使用 html 表单中的复选框来进行此选择。他们可以检查零个复选框,所有七个,以及介于两者之间的任何东西。
我很想知道人们认为执行此数据库搜索的最有效方法是什么。
我现在有两种可能的选择,但我觉得肯定有更好的东西我没有想到。
(选项 1)
- 对于每一行,只需在数据库中有七个附加字段,每种颜色一个。每个字段都有一个 1 或 0(真/假)值,我根据用户勾选的内容进行选择。 (我不太喜欢这个解决方案,因为添加七个额外字段似乎有点浪费......特别是因为这个表中的大多数图片最多只能有 3-4 种颜色,尽管有些可以 最多有 7 个。所以这意味着我要存储很多零。)另外,如果我稍后添加更多可搜索的颜色(我不认为我会这样做,但总是有可能的),我必须添加更多字段。
(选项 2)
- 对于每个图像行,我可以有一个“颜色”文本字段,用于存储以空格分隔的颜色名称(或为紧凑起见的数字)。然后我可以通过字段进行全文匹配,选择包含“红黄绿”(或“1 3 4”)的行。但是我有点不想进行全文搜索,因为我已经允许关键字搜索,而且我真的不想在每个图像搜索中进行两次全文搜索。另外,如果数据库变大,全文内容可能会变慢。
还有没有更好的选择?
谢谢!
旁注:我正在使用 PHP 来处理 MySQL 数据库。
【问题讨论】:
-
当你说“我想要一个包含红色的图像”时,你真的是说你想要一个包含红色但没有其他颜色的图像(可以这么说)?
-
不,在这种情况下,我的意思是我想要任何包含任何红色的图像(无论是[只有红色],还是[红色和蓝色和黄色])。