【发布时间】:2011-02-24 16:32:46
【问题描述】:
我有三个表,目前按以下方式构造
Table: Images
image_id
image_title
...
Table: Keywords
keyword_id
keyword
Table: Image_Keyword
image_id
keyword_id
使用这种结构,我可以使用连接和或语句搜索是否有任何图像与任何关键字匹配 - 但是我希望能够检索具有多个关键字匹配的图像,例如"keyword = ('red' or 'dress') and 'night'" - 将返回所有包含 'red' 或 'dress' 的图像,以及夜晚。
理想情况下,我希望允许用户能够在搜索框中指定 AND 和 OR 命令,这就是为什么到目前为止我选择不为每个新关键字创建单独的连接 - 但是我不确定如何继续构建查询。
目前我有以下,没有“和”实现:
SELECT i.* FROM images i
JOIN image_keyword ik ON i.id = ik.image_id
JOIN keywords k ON k.id = ik.keyword_id
WHERE k.keyword IN ('night','red')
任何有关如何创建此查询的“和”部分的帮助将不胜感激!非常感谢,
丹
// 更新
所以看起来我必须通过为我需要整理的每个“AND”请求创建连接来做到这一点 - 但是我现在对要求进行了扩展......
我还有另外两个表,结构如下
Table ImageData
id
image_id
caption_id
...
Table Caption
id
data (text)
在这种情况下,我想搜索关键字(“red”、“dress”和“night”),使用与以前相同的“AND”和“OR”功能,但如果字幕数据字段中的文本匹配(使用相同的规则)。我假设我可能在“关键字”搜索之后使用 OR,然后在标题上使用全文搜索,但是我不知道是否有更简洁的方法将两者结合起来,甚至可能作为两个单独的查询然后选择不同的结果 - 这可能允许 AND 在关键字中成功且 OR 在标题中成功的情况。
任何想法都会很棒
再次感谢
【问题讨论】: