sql >> Database >  >> RDS >> Mysql

De beste manier om vergelijkbare items uit een MySQL-database te halen

Voor myisam-tabellen kunt u zoeken in natuurlijke taal in volledige tekst:http://dev.mysql.com/doc/refman/5.5/en/fulltext-natural-language.html

SELECT * FROM article a
LEFT JOIN articletag at ON (at.articleid = a.articleid)
LEFT JOIN tag t ON (at.tagid = t.tagid)
WHERE MATCH (a.title) AGAINST ('some title' IN NATURAL LANGUAGE MODE)
OR MATCH (t.tagtext) AGAINST ('some tag' IN NATURAL LANGUAGE MODE)
GROUP BY a.articleid # if you don't want get duplicates 

U kunt ook nadenken over het toevoegen van overbodige informatie over tags in één veld (bijv. <taga><tagb><tagz> ) in de artikeltabel en update deze elke keer dat een tag wordt toegevoegd/verwijderd. Dit vereenvoudigt de zoekopdracht en zou sneller moeten zijn:

SELECT * FROM article a
WHERE MATCH (a.title, a.tagtext) AGAINST ('some title or tag' IN NATURAL LANGUAGE MODE)



  1. Kap alle tabellen in de MySQL-database af die overeenkomen met een naampatroon

  2. Migratie van Oracle Database naar MariaDB - een diepe duik

  3. Is het mogelijk om resultaten van een JOIN-query te BEPERKEN?

  4. Geselecteerde kolommen uit een CSV-bestand invoegen in een MySQL-database met behulp van LOAD DATA INFILE