정확한 일치 항목을 얻으려면 먼저 쿼리에서 무엇을 변경해야 하나요?
예를 들어 검색 양식에 happy song을 입력하면 다음과 같은 결과가 출력됩니다..
행복한 아이
행복한 날들
행복한 사람들
행복한 노래
해피스테이션
...
이것은 내 쿼리입니다..
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
및 여러 열이 포함되어 있으므로 쿼리가 상당히 혼란스러울 수 있습니다.)한 단어로만 구성된 노래를 원하지 않는 경우
으아악+
연산자를 참조하거나의도적인 따옴표 사용에 유의하세요.