поиск сообщений, связанных по тегам с одним конкретным сообщением в MySQL - PullRequest
2 голосов
/ 01 августа 2009

У меня есть следующие таблицы: сообщения (post_is, заголовок и текст), теги (tag_id, tag), Post_tag_nn (id, tag_id, post_id). Я хочу для определенного сообщения, например, иметь 4 тега для всех сообщений с этими тегами, затем для всех сообщений с любыми тремя из этих тегов, затем для всех сообщений с любыми двумя из этих тегов и так далее. Как я могу построить запрос SQL для этой цели (в php это похоже на проблему с возвратом = все подмножества данного набора).

Ответы [ 3 ]

6 голосов
/ 01 августа 2009

Запрос на поиск тегов текущего сообщения, например,

SELECT tag_id
FROM Post_tag_nn
WHERE post_id = $post_id;

Затем, используя эти идентификаторы тегов, этот запрос должен вернуть вам идентификаторы сообщений с 4,3,2, ... соответствующими тегами:

SELECT post_id, COUNT(post_id) AS tag_count
FROM Post_tag_nn
WHERE tag_id IN ($array_of_tag_ids)
GROUP BY post_id
ORDER BY tag_count DESC;
0 голосов
/ 01 августа 2009

Что-то вроде:

select t.id, t.tag_id, p.post_id, p.title, p.text
  from post_tag_nn as t, posts p
  where p.id = t.post_id
  order by t.id

А затем сделайте группу в вашем коде. Конечно, вы могли бы сделать два разных запроса: один, где вы определяете порядок и количество ваших тегов, а затем другой, где вы извлекаете сообщение для каждого тега.

0 голосов
/ 01 августа 2009

Если вы собираетесь сносить каждое сообщение хотя бы с одним тегом, лучше всего выполнить один запрос на каждый тег, чтобы получить все сообщения с этим тегом, а затем сгенерировать устанавливает себя.

...