[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Не получается выбрать данные из 3х таблиц
SmorodinKA
Добрый день. Для начала опишу таблицы и их взаимосвязь:
1. Таблица users, имеющая необходимое значени id
2. Таблица blog, имеющая необходимые нам значения id_author (связана с users.id) и id
3. Таблица comments, имеющая необходимые нам id_blog (связана с blog.id), id_user (связана с users.id)/ Здесь id_user - пользователь, который оставил комментарий.

Мне необходимо выбрать все комментарии, которые были написаны любыми пользователями к блогу, автором которого является один из пользователей таблицы users, то есть взять любой блог одного из пользователей и вывести все комментарии ко всем написанным постам этого блога.

Вот мой запрос:
"SELECT comments.*, users.img_small AS user_img, users.id AS user_id, users.name AS
user_name, users.surname AS user_surname, users.sex AS user_sex FROM `comments` LEFT JOIN
`users` ON comments.id_user=users.id RIGHT JOIN `blog` ON comments.id_blog=blog.id WHERE
comments.type='2' AND blog.id_author='"
.intval($user['id'])."' ORDER BY comments.id DESC"


Подскажите, где я неправ? Спасибо.
paul85
Посмотрите вот это:
http://www.youtube.com/watch?v=KTvYHEntvn8

У вас таким образом нет пересечений между 3-мя таблицами. Вы, очевидно, ошибочно полагаете, что в центре таблица comments, тогда как она совершенно не в центре, а слева. В центре у вас таблица users, а справа blog. Причем главные именно comments и blog - у вас так JOIN-ы написаны. Имейте ввиду, что каждый последующий JOIN подразумевает не первую таблицу, а предыдущую. В этом многие путаются...

В результате должно быть что-то вроде такого:
Вся таблица comments где type=2 и соответствующие ей users если есть... И таблица blog где id_author=? c соответствующими ей users, если есть. Недостающие поля выставлены в NULL. То есть просто какой-то непонятный набор данных...

Если я ничего не напутал, конечно... Проверить негде, а запросы подобного рода довольно редки.
SmorodinKA
lekafe
Дело в том, что ее нет, просто запрос ничего не получает.

Может будет проще в таблицу `comments` ввести новое поле, в которое будет записывается id пользователя, комментарий к посту которого оставлен?
S.Chushkin
Попытайте так:
SELECT comments.*, users.img_small AS user_img, users.id AS user_id, users.name AS user_name, users.surname AS user_surname, users.sex AS user_sex 
FROM blog
INNER JOIN `users` ON users.id = blog.id_author
LEFT JOIN comments ON comments.type = '2' and comments.id_blog = blog.id
WHERE blog.id_author = ...
ORDER BY comments.id DESC

По сути, "INNER JOIN `users`" здесь даже лишнее, если структура БД составлена правильно.

_____________
Рекламка / ad.pesow.com Хрень / mr-1.ru
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.