Лучший способ извлечь аналогичные элементы из базы данных MySQL - PullRequest
1 голос
/ 04 сентября 2011

У меня есть база данных (статьи на этот счет).
То, что я хотел бы сделать, это то, что я хотел бы извлечь элементы X, которые похожи на определенный элемент, на основе двух вещей: заголовок, который является заголовком статьи, и теги, которые расположены в другой таблице.

Структура выглядит следующим образом (только соответствующие поля):

Таблица: артикул
Поля: articleid, title

Таблица: тег
Поля: tagid, tagtext

Таблица: article
Поля: tagid, articleid

Каков наилучший способ сделать это?

1 Ответ

0 голосов
/ 04 сентября 2011

Для таблиц myisam вы можете использовать полнотекстовый поиск на естественном языке: 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 

Также можно подумать о добавлении избыточной информации о тегах в одно поле (например, <taga><tagb><tagz>) в таблице статей.и обновлять его каждый раз, когда тег добавляется / удаляется.Это упростит запрос и будет быстрее:

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