Priorisieren Sie die Anzeige von Volltextsuchergebnissen für „beste Übereinstimmungen' für exakte Übereinstimmungen, einschließlich Verknüpfungstabellen
P粉002572690
P粉002572690 2024-03-29 12:30:39
0
1
365

Was muss ich in der Abfrage ändern, um überhaupt eine exakte Übereinstimmung zu erhalten?

Wenn zum Beispiel jemand Fröhliches Lied in das Suchformular eingibt, erhält er nun diese Ausgabe..

Glückliches Kind

Schöne Tage

Fröhliche Menschen

Fröhliches Lied

Fröhlicher Bahnhof

...

Das ist meine Frage..

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

Antworte allen(1)
P粉116654495

您当前正在要求使用 ORDER BY 歌曲 ASC 按字母顺序排序

更改为 ORDER BY MATCH(...) AGAINST(...) DESC

这可能会将“一首关于快乐孩子的歌曲”放在第一位。也就是说,如果你首先需要“欢歌”,我们就需要更加努力:

SELECT ...
    FROM ...
    WHERE ...
    ORDER BY song = "happy song" DESC,
             MATCH(...) AGAINST (...)

(由于您有 OR 并涉及多个列,因此查询可能会变得相当混乱。)

如果您不想要只有一个单词的歌曲,请参阅 + 运算符,或者

MATCH(song) AGAINST('+"happy song"')

注意引号的有意使用。

Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!