虽然这个主题已被广泛讨论,但它让我感到非常困惑,并且我一直无法提炼出正确的答案。你能帮我正确的方向吗?谢谢。全文索引在MySQL视图或更正搜索联接表的方式
我有这种设置:
页面(P)
sid | title | content
部件(W)sid | content
:表page
由参考表widget_to_page
的方式连接到表widget
widget_to_page(wtp)sid | page_sid | widget_sid
我已经创建了一个p.title
全文索引,p.content
,w.content
接下来,我想给页面控件组合:
SELECT *, MATCH(p.title, p.content, w.content) AGAINST("'.$keyword.'") AS score
FROM page p, widget w, widget_to_page wtp
WHERE MATCH(p.title, p.content, w.content) AGAINST("'.$keyword.'")
AND p.sid = wtp.page_sid
AND w.sid = wtp.widget_sid
ORDER BY score DESC
一些言论:
- 这显然不起作用... :-)
- 我一直在阅读,如果我使用这个语法t o加入表(或使用JOIN)语句,它会导致MySQL忽略全文索引。什么是正确的方法?
我已经尝试了另一种是创建一个MySQL视图了以下声明:
SELECT *
FROM page p, widget w, widget_to_page wtp
WHERE p.sid = wtp.page_sid
AND w.sid = wtp.widget_sid
但是,这也似乎并没有工作。有些人说在这个特定的视图上创建一个全文索引,但我无法在PHPMyAdmin中找到任何选项来做到这一点,我不知道这是甚至可能的。
总之......这种情况下的最佳做法是什么?谢谢。
谢谢您的回答,但我不断收到错误'未知列“w.sid 'in'field list'',关于'w.sid'的第一个实例。如果我删除'w.sid作为widget_sid,'我得到一个错误'找不到匹配列列表的FULLTEXT索引。 你有什么建议? – maartenmachiels 2011-03-08 09:18:50
对不起,我之前有一个错字。我切换了w.sid和NULL。我现在修好了。 – 2011-03-08 16:11:37
此外,请注意,您需要创建两个新的全文索引:一个(p.title,p.content)和一个(w.content)。 – 2011-03-08 16:12:16