我想知道是否可以在MySQL中对结果进行索引。例如,我有一个可以使用的搜索词,可以是一个词或多个词。例如。 "房子"或者"高海上住宅"。现在我想知道MySQL是否可以索引那个"高海洋房屋"在查询中适合3次,而不是" house"只适合一次。
我想到这样的事情:
select `fields` from `table` where
`searchfield` like 'high' or
`searchfield` like 'sea' or
`searchfield` like 'house' or
依此类推 - 取决于我在搜索过程中使用了多少个。
现在我需要按如下方式对搜索过程进行排序:
有什么想法吗?
Thanx很多!
答案 0 :(得分:0)
您可以使用以下查询:
SELECT `fields` FROM `table`, (`searchfield` LIKE '%high%') +
(`searchfield` LIKE '%sea%') + (`searchfield` LIKE '%house%') AS hits
WHERE `searchfield` LIKE '%high%' OR
`searchfield` LIKE '%sea%' OR
`searchfield` LIKE '%house%'
ORDER BY hits DESC
或者简单地说:
SELECT `fields` FROM `table`, (`searchfield` LIKE '%high%') +
(`searchfield` LIKE '%sea%') + (`searchfield` LIKE '%house%') AS hits
HAVING hits > 0
ORDER BY hits DESC
它作为布尔值计算返回1或0。 高和 sea 是searchfield
hits
的一部分,将是1 + 1 + 0 = 2.然后按行降序排序,以便您和#39;首先获得点击次数最多的行。
现在我不知道你在searchfield
中存储了什么,但是如果它包含用空格分隔的单词,你也可以用空格包围搜索单词(例如'% sea %'
)所以你赢得 seahorse 的比赛。如果他们之前和之后都没有空格,那么searchfield
中的第一个和最后一个单词就会出现问题。