Поиск текста / тегов с одной стороны ассоциативной таблицы в MySQL и возврат данных с другой - PullRequest
0 голосов
/ 17 июля 2011

У меня есть структура таблицы примерно такая (это огромное упрощение):

Posts
    UID
    Title
    Text ID (linked to Text.UID)

Tags
    UID
    Tag Name
    Tag Description

Tag Associations
    UID
    Post UID (linked to Posts.UID)
    Tag UID (linked to Tags.UID)

Text
    UID
    Text

Я бы хотел знать две вещи:

А) Как я могу сделать запрос, чтобы вернуть всю информацию из таблицы сообщений (включая текст из таблицы текста), для всех «сообщений», связанных с определенным тегом (поиск по незашифрованному тексту), без дублирования один пост может содержать до 20 тегов?

Например, тегом может быть «PHP», и я хочу вернуть все сообщения с тегом «PHP», связанным с ними.

B) Кроме того, я хотел бы включить ВСЕ имена тегов, связанные с каждым сообщением, но я не уверен, что это можно сделать в одном запросе.

Я использую подготовленные операторы и отображаю сразу несколько полных постов из поиска со всеми их тегами, и, скорее всего, не нужно будет запускать отдельные запросы для возврата поста и всех его тегов.

1 Ответ

0 голосов
/ 17 июля 2011
SELECT
  Posts.Title AS Title,
  Text.Text AS Text,
  (
    SELECT Tags.*
    FROM Tags
    INNER JOIN TagAssociations ON Tags.UID = TagAssociations.TagUID
    WHERE TagAssociations.PostUID = Posts.UID
 ) AS Tags
FROM Posts
INNER JOIN Text ON Posts.UID = Text.UID
INNER JOIN TagAssociations ON Posts.UID = TagAssociations.PostUID
INNER JOIN Tags ON Tags.UID = TagAssociations.TagUID
WHERE Tags.TagName = 'search'

Не думаю, что подзапрос сработает, но вы можете попробовать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...