Rumah > Soal Jawab > teks badan
Apakah yang perlu saya ubah dalam pertanyaan untuk mendapatkan padanan tepat di tempat pertama?
Contohnya, sesiapa yang masukkan lagu gembira dalam borang carian, sekarang dia akan dapat output ini..
Anak gembira
Hari-hari bahagia
Orang gembira
Lagu gembira
Stesen gembira
...
Ini pertanyaan saya..
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粉1166544952024-03-30 00:57:29
Anda sedang meminta ORDER BY 歌曲 ASC
Isih mengikut abjad
ditukar kepada ORDER BY MATCH(...) AGAINST(...) DESC
Ini mungkin meletakkan "Lagu Tentang Kanak-Kanak Bahagia" di bahagian atas senarai. Yang berkata, jika anda perlu "menyanyi" dahulu, kita perlu bekerja lebih keras:
SELECT ... FROM ... WHERE ... ORDER BY song = "happy song" DESC, MATCH(...) AGAINST (...)
(Memandangkan anda mempunyai OR
dan berbilang lajur yang terlibat, pertanyaan boleh menjadi agak mengelirukan.)
Jika anda tidak mahu lagu dengan hanya satu perkataan, lihat +
pengendali, atau
MATCH(song) AGAINST('+"happy song"')
Perhatikan penggunaan tanda petikan yang disengajakan.