Utamakan hasil carian teks penuh untuk "padanan terbaik" untuk padanan tepat, termasuk jadual gabungan
P粉002572690
P粉002572690 2024-03-29 12:30:39
0
1
360

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粉002572690
P粉002572690

membalas semua(1)
P粉116654495

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.

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!