SQL: помогите с объединениями sql - PullRequest
0 голосов
/ 16 января 2011

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

Структура базы данных выглядит следующим образом:

сообщений

ID

tags_ref

row_id

таблица

tag_id

метка

ID

safe_tag

бирка

Мой запрос в основном выполняется, если $ safe_tag не равен нулю, тогда присоединяйтесь к tags_ref по post.id = tags_ref.row_id, присоединяйте теги к tags_ref.tag_id = tags.id, где tags_ref.table = 'posts' и tags.safe_tag = ' food 'и post.city_id = 2

Правильно ли выполнен этот запрос? Я использую правильный тип соединения?

SELECT *
FROM (`posts`)
INNER JOIN `tags_ref` ON `posts`.`id` = `tags_ref`.`row_id`
INNER JOIN `tags` ON `tags_ref`.`tag_id` = `tags`.`id`
WHERE `tags_ref`.`table` = 'posts'
AND `tags`.`safe_tag` = 'food'
AND `posts`.`city_id` = '2' 

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

Спасибо

1 Ответ

1 голос
/ 16 января 2011

Это вернет только результаты из таблицы posts, в отличие от всех столбцов в таблицах объединения.Я удалил ограничение city_id, которое вы не указали в тексте своего вопроса (а было в вашем запросе):

SELECT P.*
FROM posts AS P
  INNER JOIN tags_ref AS TR ON P.id = TR.row_id
  INNER JOIN tags AS T ON TR.tag_id = T.id
WHERE TR.table = 'posts'
AND T.safe_tag = 'food'

Я также добавил псевдонимы таблиц и удалилцитата.

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

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