我必须在多个MySQL表中进行实习研究。 事实上,我这样做是为了一个网络电话目录。我有一个表单文本输入来进入研究。 我尝试使用MATCH / AGAINST语法,但似乎是错误的。 我的查询实际上就是那个:
SELECT U_ID, 'users'
from users
where match ([columns that I want to search in]) AGAINST ([The text inside my search field])
UNION
SELECT S_ID, 'service'
from service
where match ([columns that I want to search in]) AGAINST ([The text inside my search field])
这个问题如下:对于这种类型的搜索,我必须在许多MATCH中发送变量,因此我不能得到相关结果(因为多个反对元素)。完美的解决方案可能是取代'UNION'通过' INTER'但这太容易了。 我不知道它是否有用,但我使用PDO通过PhP发送我的查询
我试图搜索解决方案,但我无法找到一个:
https://dev.mysql.com/doc/refman/5.5/en/fulltext-search.html
Using Full-Text Search in SQL Server 2008 across multiple tables, columns
MySQL fulltext search on multiple tables with different fields
然后我尝试使用Sphinx,但文档对我来说很复杂,我无法理解(http://sphinxsearch.com/docs/current.html)。
有人可以帮我找到我需要的查询,还是可以在Windows上给我一个非常清晰简单的Sphinx教程链接(我已经阅读过IBM的那篇)?
编辑:
我想用集合论(inter mean intersection)来说明我的问题。 例如,当我输入"约翰会计部门"在我的表单输入中,我想显示名为John的所有用户,但仅限于他们属于会计部门。 通过我的实际搜索,我将获得所有部门的ID:" John"或"会计"或"部门"以及所有名为" John"或会计"或部门"。 这是我的实际问题。
答案 0 :(得分:0)
我认为 物化视图 是在MySQL中解决此问题的最简单方法。
它们不是严格的mysql功能(即mysql无法自动维护视图,它不是真正的视图)它是一个普通的表,恰好是其他表的副本数据。
实际上可以很容易地创建......
CREATE TABLE my_search_view (fulltext(U_Name,S_Name))
SELECT U_ID, U_Name, S_ID, S_Name
FROM user
INNER JOIN service USING (S_ID);
(如果您更新源表,只需删除该表,然后重新创建它!虽然如果想要一个更动态的解决方案可以使用触发器,但根据数据大小可能不值得付出努力)
现在你可以对这个表运行一个简单的查询(它有一个全文索引)
SELECT *
FROM my_search_view
WHERE MATCH (U_Name,S_Name) AGAINST ('John accounting department')