下令这个问题是关于索引或替代UNION,将工作一样。替代或解决方案UNION不要有数据手动
在进一步的例子中,我们假设title
text
和content
都具有fulltext
为index
假设我们有三个报表
SELECT title as text FROM news ORDER BY score DESC
SELECT name as text FROM pages ORDER BY score DESC
SELECT content as text FROM comments ORDER BY score DESC
我们可以将它们组合起来(请注意,我们手动进行订购)
SELECT title as text FROM news ORDER BY score DESC
UNION
SELECT name as text FROM pages ORDER BY score DESC
UNION
SELECT content as text FROM comments ORDER BY score DESC
现在我们已经text
,我们可以PRI NT但订单将是1)消息2)3页)评论
这是非常糟糕的,因为我们希望这些按分数排序不同可能
因此,我们可以将所有这些THREE SELECTS
到ONE SELECT
和秩序他们
SELECT text FROM (
SELECT title as text FROM news ORDER BY score DESC
UNION
SELECT name as text FROM pages ORDER BY score DESC
UNION
SELECT content as text FROM comments ORDER BY score DESC
) as combination
现在我们可以通过score
再次ORDER
吧,这是非常糟糕的,因为分数是根据每个表不是每个整选择
所以,我们会继续前进,我的问题更接近。
下一步是引进MATCH() and AGAINST()
和我们写
SELECT text, MATCH(text) AGAINST ('anything') as total_score FROM (
SELECT title as text FROM news ORDER BY score DESC
UNION
SELECT name as text FROM pages ORDER BY score DESC
UNION
SELECT content as text FROM comments ORDER BY score DESC
) as combination ORDER BY total_score DESC
我们完成了!如果不是MATCH(text
)似乎不会被索引为全文,那么一切都应该完美。出现
错误:无法找到FULLTEXT指数相匹配的列列表
现在consufion来了,有可能是一无所有,但不知何故让text
一个FULLTEXT
。不幸的是,作为text
没有这样的列现有的数据库,说你不能找到它在phpMyAdmin,使其FULLTEXT
这种方式。
我想延长name as text
进一步使其接近name as text type fulltext
或类似的东西,我找不到任何地方。
请帮我解决,我想听听任何东西,也许有另一种方式来解决这种情况?我不知道。我会非常感谢。
我想是这样的:http://stackoverflow.com/questions/13904885/fulltext-search-scores-calculated-not-from- all-given-tables如果您有时间,请参阅它,否则感谢您的回复。 – Davit