優先顯示精確匹配的「最佳匹配」的全文搜尋結果,包括聯接表
P粉002572690
P粉002572690 2024-03-29 12:30:39
0
1
410

我必須在查詢中更改哪些內容才能首先獲得精確匹配?

例如,任何人在搜尋表單中輸入快樂歌曲,現在他會得到這個輸出..

快樂的孩子

快樂的日子

快樂的人

歡樂歌

# 快樂站

# ...

這是我的查詢..

SELECT  `artist`, `song`, `genre`, `pass`, `id`
        FROM  `songs`
        JOIN  `artists` USING (`pass`)
        WHERE  MATCH(`artist`) AGAINST("happy song")
          OR  MATCH(`song`, `genre`) AGAINST("happy song")
        ORDER BY  `song` ASC
        LIMIT  0,30
') or die(mysql_error($_connect));```

Thank you!

EDIT 03.07.22
Changed query to:<br>
```$query = mysqli_query($_connect, '
    SELECT  `artist`, `song`, `genre`, `pass`, `id`
        FROM  `songs`
        JOIN  `artists` USING (`pass`)
        WHERE  MATCH(`artist`) AGAINST("happy song")
          OR  MATCH(`song`, `genre`) AGAINST("happy song")
        ORDER BY  `song` = "happy song" DESC
') or die(mysql_error($_connect));```

The output is the same, result with only "song" in the text are above in the result when searched for "happy song"

**EDIT 14.7.22**
**Table Artists:**

CREATE TABLE `artists` (
  `artist` varchar(40) NOT NULL,
  `pass` int(10) UNSIGNED NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 PACK_KEYS=1;

ALTER TABLE `artists`
  ADD PRIMARY KEY (`pass`),
  ADD UNIQUE KEY `uni_que` (`artist`) USING BTREE;
ALTER TABLE `artists` ADD FULLTEXT KEY `full_txt` (`artist`);
COMMIT;

**Table Songs:**

    CREATE TABLE `songs` (
      `song` varchar(80) NOT NULL,
      `tags` varchar(40) NOT NULL,
      `style` varchar(20) NOT NULL,
      `pass` bigint(20) UNSIGNED NOT NULL,
      `id` bigint(20) UNSIGNED NOT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 PACK_KEYS=1;
    
    ALTER TABLE `songs`
      ADD PRIMARY KEY (`id`);
    ALTER TABLE `songs` ADD FULLTEXT KEY `song` (`song`,`tags`,`style`);
    COMMIT;

P粉002572690
P粉002572690

全部回覆(1)
P粉116654495

您目前正在要求使用 ORDER BY 歌曲 ASC 按字母順序排序

更改為 ORDER BY MATCH(...) AGAINST(...) DESC

#這可能會將「一首關於快樂孩子的歌曲」放在第一位。也就是說,如果你首先需要“歡歌”,我們就需要更加努力:

SELECT ...
    FROM ...
    WHERE ...
    ORDER BY song = "happy song" DESC,
             MATCH(...) AGAINST (...)

(由於您有 OR 並涉及多個列,因此查詢可能會變得相當混亂。)

如果您不想要只有一個單字的歌曲,請參閱 運算符,或

MATCH(song) AGAINST('+"happy song"')

注意引號的有意使用。

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板