【发布时间】:2015-07-14 22:23:02
【问题描述】:
我有一个相当复杂的查询,它在 4 个表中搜索一个或多个关键字:
select distinct textures.id from textures
left join `category_texture` on `category_texture`.`texture_id` = `textures`.`id`
left join `categories` on `categories`.`id` = `category_texture`.`category_id`
left join `tag_texture` on `tag_texture`.`texture_id` = `textures`.`id`
left join `tags` on `tags`.`id` = `tag_texture`.`tag_id`
left join `size_texture` on `size_texture`.`texture_id` = `textures`.`id`
left join `sizes` on `sizes`.`id` = `size_texture`.`size_id`
WHERE ( (textures.name LIKE '%artwork%'
OR categories.name LIKE '%artwork%'
OR tags.name LIKE '%artwork%'
OR sizes.name LIKE '%artwork%') AND (textures.name LIKE '%super%'
OR categories.name LIKE '%super%'
OR tags.name LIKE '%super%'
OR sizes.name LIKE '%super%') AND (textures.name LIKE '%master%'
OR categories.name LIKE '%master%'
OR tags.name LIKE '%master%'
OR sizes.name LIKE '%master%') ) AND `textures`.`is_published` = 1 group by `tags`.`name`, `categories`.`name`, `sizes`.`name`, `textures`.`id`
在这个例子中,artifacts 是一个类别,master 和 super 是标签。问题是,如果我重复任何表格,都找不到结果:
- 艺术品(类别)+大师(标签)作品
- 艺术作品
- artwork + master + super 不起作用 - 它应该打印所有具有艺术品作为类别和 2 个标签(master 和 super)的纹理,但它没有。
提前致谢。
为清楚起见进行编辑:
我的目标是能够在这些表中搜索数据,从而可以组合同一个表的多个实例。例如,如果我搜索“artwork super master”,它应该返回我所有的纹理,类别为“artwork”(因为它是唯一找到这个词的地方)和标签“super”和“master”(两者都是)。
目前使用此查询,我可以在任何这些表中进行搜索,但前提是我的搜索在同一个表中没有找到 2 个以上的内容。因此,搜索类别 + 纹理名称 + 标记 + 大小是可行的,但搜索发现为 2 个标记的内容会失败。
【问题讨论】:
-
查看正在查询的数据示例将真正帮助这里的人们。我认为这是最严格的查询 3,因为它正在过滤艺术品、超级和大师。 (未显示含义 1 和 2。)另外,“如果我重复任何表格”是什么意思?
-
用更好的解释编辑了我的帖子。
-
这似乎是
full text search的创建对象。 dev.mysql.com/doc/refman/5.0/en/fulltext-search.html -
不幸的是,我被要求“按原样”解决这个问题,而不是进行全文搜索:(
-
显示的查询只会返回 3 个标签中的每一个都存在于 4 个表中的至少 1 个表中的行。它正在做你告诉它的事情。您似乎需要使用模式匹配搜索每个表(查询)的 single 实例,而不是您一直提到的“多个表”。你打算怎么搜索?搜索模式将如何输入到您的数据库中?