我必須在查詢中更改哪些內容才能首先獲得精確匹配?
例如,任何人在搜尋表單中輸入快樂歌曲,現在他會得到這個輸出..
快樂的孩子
快樂的日子
快樂的人
歡樂歌
# 快樂站
# ...
這是我的查詢..
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;
您目前正在要求使用
ORDER BY 歌曲 ASC
按字母順序排序更改為
ORDER BY MATCH(...) AGAINST(...) DESC
#這可能會將「一首關於快樂孩子的歌曲」放在第一位。也就是說,如果你首先需要“歡歌”,我們就需要更加努力:
(由於您有
OR
並涉及多個列,因此查詢可能會變得相當混亂。)如果您不想要只有一個單字的歌曲,請參閱
運算符,或
注意引號的有意使用。