>  Q&A  >  본문

조인 테이블을 포함하여 정확한 일치에 대한 "최상의 일치"에 대한 전체 텍스트 검색 결과 표시 우선순위 지정

정확한 일치 항목을 얻으려면 먼저 쿼리에서 무엇을 변경해야 하나요?

예를 들어 검색 양식에 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;

P粉002572690P粉002572690203일 전381

모든 응답(1)나는 대답할 것이다

  • P粉116654495

    P粉1166544952024-03-30 00:57:29

    현재 요청 중입니다. ORDER BY 歌曲 ASC 알파벳순으로 정렬

    ORDER BY MATCH(...) AGAINST(...) DESC

    로 변경되었습니다.

    이렇게 하면 '행복한 아이에 관한 노래'가 목록 상단에 표시될 수 있습니다. 그렇긴 하지만, 먼저 "노래"를 해야 한다면 우리는 더 열심히 노력해야 합니다:

    으아악

    (OR 및 여러 열이 포함되어 있으므로 쿼리가 상당히 혼란스러울 수 있습니다.)

    한 단어로만 구성된 노래를 원하지 않는 경우 + 연산자를 참조하거나

    으아악

    의도적인 따옴표 사용에 유의하세요.

    회신하다
    0
  • 취소회신하다