sql >> Databasteknik >  >> RDS >> Mysql

Bästa sättet att hämta liknande objekt från en MySQL-databas

För myisam-tabeller kan du använda Natural Language Full-Text Search: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 

Du kan också tänka på att lägga till redundant information om taggar i ett fält (t.ex. <taga><tagb><tagz> ) i artikeltabellen och uppdatera den varje gång taggen läggs till/tas bort. Detta kommer att förenkla frågan och det borde vara snabbare:

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



  1. välj fråga i listan i en kolumn

  2. Codeigniter:Kolumn 'id' i ordningssats är tvetydig

  3. Kontrollera om det finns en rad med givna värden

  4. välj sökfråga i wordpress