cari

Rumah  >  Soal Jawab  >  teks badan

Utamakan hasil carian teks penuh untuk "padanan terbaik" untuk padanan tepat, termasuk jadual gabungan

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粉002572690P粉002572690269 hari yang lalu425

membalas semua(1)saya akan balas

  • P粉116654495

    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.

    balas
    0
  • Batalbalas