0

次の 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.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

フルテキスト インデックスと照合すると正しい結果セットが返されますが、報告される「MatchValue」はブール型 (0 または 1) のみです。

ステートメントの 5 行目を削除すると、次のようになります。

OR g.GameTitle SOUNDS LIKE 'call of duty'

約 5.23 から 15.56 の範囲の適切な一致値が得られますが、「代替」との一致時に一部の機能が失われます。

私はSQLが得意ではなく、これだけ機能させるのに数日かかりました...

結果が適切に並べられるように、5 行目と 6 行目でブール値以外の一致値を返す方法はありますか?

前もって感謝します ;)

4

1 に答える 1

0

'ABC' OR (3 > 2)結果を求めていると言うときBOOL。文字列またはブール値を取得することはできません。上記の場合、文字列は数値を表していないため、ブール値の0'abc'に変換されます。

OR文字列とブール値を ing するのはあまり意味がないので、2 つを分離します。

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,

このようにして、両方の方法で取得します。ブール値を取得すると、別の列で(可能な)一致が得られます。

于 2012-07-18T14:45:39.447 に答える