Mysql SQL全文匹配值仅返回匹配项的布尔值(1或0)
我有以下SQL语句:Mysql SQL全文匹配值仅返回匹配项的布尔值(1或0),mysql,match,full-text-search,Mysql,Match,Full Text Search,我有以下SQL语句: SELECT g.*, ( MATCH (g.GameTitle) AGAINST ('call of duty') OR g.GameTitle SOUNDS LIKE 'call of duty' ) AS MatchValue, p.id AS platformid, p.alias AS PlatformAlias, p.name, p.i
SELECT
g.*,
(
MATCH (g.GameTitle) AGAINST ('call of duty')
OR g.GameTitle SOUNDS LIKE 'call of duty'
)
AS MatchValue,
p.id AS platformid,
p.alias AS PlatformAlias,
p.name,
p.icon
FROM
games AS g,
platforms AS p
WHERE
(
(
MATCH (g.GameTitle) AGAINST ('call of duty')
OR g.GameTitle SOUNDS LIKE 'call of duty'
)
OR
(
MATCH (g.Alternates) AGAINST ('call of duty')
OR g.Alternates SOUNDS LIKE 'call of duty'
)
)
AND g.Platform = p.id
ORDER BY MatchValue DESC
OR g.GameTitle SOUNDS LIKE 'call of duty'
它在与全文索引匹配时返回正确的结果集,但是报告的“MatchValue”仅具有布尔性质(0或1)
如果我删除语句的第5行:
SELECT
g.*,
(
MATCH (g.GameTitle) AGAINST ('call of duty')
OR g.GameTitle SOUNDS LIKE 'call of duty'
)
AS MatchValue,
p.id AS platformid,
p.alias AS PlatformAlias,
p.name,
p.icon
FROM
games AS g,
platforms AS p
WHERE
(
(
MATCH (g.GameTitle) AGAINST ('call of duty')
OR g.GameTitle SOUNDS LIKE 'call of duty'
)
OR
(
MATCH (g.Alternates) AGAINST ('call of duty')
OR g.Alternates SOUNDS LIKE 'call of duty'
)
)
AND g.Platform = p.id
ORDER BY MatchValue DESC
OR g.GameTitle SOUNDS LIKE 'call of duty'
我得到了从5.23到15.56之间的合适匹配值,但是当匹配“备选”时,我失去了一些功能
我对SQL不是很在行,我花了好几天时间才让它发挥这么大的作用
有没有办法让第5行和第6行返回一个非布尔匹配值,以便我的结果正确排序
提前感谢;) 当你说
'ABC'或(3>2)
你是在要求一个BOOL
结果。不能获取字符串或布尔值。在上述情况下,字符串'abc'
转换为布尔值0,因为它不表示数字
由于在或中对字符串和布尔值进行赋值没有多大意义,因此我将两者分开:
SELECT
g.*,
(
MATCH (g.GameTitle) AGAINST ('call of duty')
OR g.GameTitle SOUNDS LIKE 'call of duty'
)
AS MatchResultBoolean,
MATCH (g.GameTitle) AGAINST ('call of duty') AS MatchText,
p.id AS platformid,
p.alias AS PlatformAlias,
p.name,
p.icon
FROM
games AS g,
platforms AS p
WHERE
(
(
MATCH (g.GameTitle) AGAINST ('call of duty')
OR g.GameTitle SOUNDS LIKE 'call of duty'
)
OR
(
MATCH (g.Alternates) AGAINST ('call of duty')
OR g.Alternates SOUNDS LIKE 'call of duty'
)
)
AND g.Platform = p.id
ORDER BY MatchValue DESC
请注意变化:
(
MATCH (g.GameTitle) AGAINST ('call of duty')
OR g.GameTitle SOUNDS LIKE 'call of duty'
)
AS MatchResultBoolean,
MATCH (g.GameTitle) AGAINST ('call of duty') AS MatchText,
通过这种方式,您可以双向获得:一次获得布尔值,在另一列中获得(可能的)匹配。您希望如何确定g.GameTitle的相关值。GameTitle听起来像是“使命召唤”
(或者本质上是SOUNDEX(g.GameTitle)
)这与MATCH
返回的相关性值有意义的关联,并且可以在它们之间进行排序?似乎我错误地假设SOUNDEX返回了相关性值,可能是我把它与其他东西混淆了。。。谢谢你的澄清:)谢谢你向我解释这一点,你这样做更有意义。我想如果我想在我的应用程序中包含这两种类型的匹配,并根据相关性对这个混合集进行排序,我可以从您提供的上述查询中获取结果,将它们全部粘贴到一个PHP数组(或等效数组)中,并根据初始搜索字符串对它们进行排序。。。当我们讨论这个主题时,我想您不知道有什么库/脚本或一些资源可以在php中完成这种类型的相关性排序?再次感谢你的帮助!;)Ii可能是一个过度扩张,但却是一个非常有能力的搜索引擎。不过,我想这会让你的事情变得相当复杂。