Выбор определенных помеченных сообщений и их авторов - PullRequest
1 голос
/ 03 апреля 2011

Как вы можете объединить эти 5 столов вместе:

tag: id, name
author: username, id
thread_tags: thread_id, tag_id
thread: id, content
author_threads: author_id, thread_id

(у меня также есть таблица с именем author_tags (tag_id, author_id), но я не думаю, что это нужно здесь).

Я хочу выбрать все темы с тегами определенного тега и их авторов.

Следующий код возвращает #1066 - Not unique table/alias: 'tag'

SELECT thread.content, author.username
FROM tag
JOIN thread_tags ON thread.id = thread_tags.thread_id
JOIN tag ON thread_tags.tag_id = tag.id
JOIN author_threads ON author.id = author_threads.author_id
JOIN author ON author_threads.thread_id = thread.id
WHERE tag.name = 'arsenal'

EDIT:

Это работает:

SELECT thread.content
FROM tag
JOIN thread_tags ON tag.id = thread_tags.tag_id
JOIN thread ON thread.id = thread_tags.thread_id
WHERE tag.name =  'tagged'
LIMIT 0 , 30

Однако всякий раз, когда я пытаюсь присоединиться к авторам с их потоками, выдается ошибка # 1066.

Ответы [ 4 ]

0 голосов
/ 03 апреля 2011
SELECT thread.content, author.username
FROM thread
LEFT JOIN thread_tags ON thread.id = thread_tags.thread_id
LEFT JOIN tag ON thread_tags.tag_id = tag.id
LEFT JOIN author_threads ON author.id = author_threads.author_id
LEFT JOIN author ON author_threads.thread_id = thread.id
WHERE tag.name = 'arsenal'

Кстати, не лучше ли хранить таблицу author_id`` in thread`?

0 голосов
/ 03 апреля 2011

почему у вас есть таблица тегов в вашем JOIN? вот почему вы получаете сообщение об ошибке:

JOIN tag ON thread_tags.tag_id = tag.id

здесь также есть табличный тег:

FROM tag
Таблица тегов

появилась дважды.

0 голосов
/ 03 апреля 2011

У вас есть таблица тегов дважды в вашем запросе. Может быть, в этом проблема.

0 голосов
/ 03 апреля 2011

Вы присоединились к таблице tag дважды (таким образом, ошибка) и не присоединились к таблице thread.

SELECT thread.content, author.username
FROM tag
  JOIN thread_tags
    ON tag.id = thread_tags.tag_id
  JOIN thread                                  --join thread (not tag again)
    ON thread.id = thread_tags.thread_id
  JOIN author_threads
    ON author_threads.thread_id = thread.id     --error here too, in your query
  JOIN author
    ON author.id = author_threads.thread_id     --error here too, in your query
WHERE tag.name = 'arsenal'
...