dzheka3d
@dzheka3d

Как вывести тему к которой был написан комментарий?

Друзья, не дайте загинуть в пучине неведания... Постарайтесь вникнуть в вопрос, хоть он и большой, ибо я уже не знаю что делать.
В каждом своем вопросе я затрагиваю эту тему косвенно, но сейчас столкнулся напрямую...
Дело вот в чем. На сайте пользователь может написать комментарий к: новости, фотографии, посту и еще куча всяких страниц. Остановимся на этих трех.
В базе MySQL комментарии хранятся в таблице так:
18054fd3c73c45dfb0f3701b60abc90c.jpg
Фотографии, новости и посты хранятся соответственно каждый в своих таблицах.
Получается, чтобы получить комментарии к новости с id 555 я делаю такой запрос:
SELECT * FROM `comments` WHERE `mode` = 'news' AND `mode_id` = 555

Для комментариев к фотографии 444 такой:
SELECT * FROM `comments` WHERE `mode` = 'photos' AND `mode_id` = 444

и так далее.
Но теперь столкнулся с проблемой. Мне нужно вывести все комментарии из таблицы `comments` со ссылкой на ту страницу, к которой они написаны будь то фотография, новость или пост.
Запрос логично сделать такой:
SELECT `comments`.*, ????.* FROM `comments` LEFT JOIN ???? ON ????.`id` = `comments`.`mode_id`

Вот тут и появляется проблема. Как мне выбрать нужную таблицу для JOIN?

Из предыдущих вопросов где затрагивалась эта тема, я понял, что скорее всего нужно делать 3 запроса UNION ну или отдельными запросами:
SELECT `comments`.*, `news`.* FROM `comments` LEFT JOIN `news` ON `news`.`id` = `comments`.`mode_id`
SELECT `comments`.*, `photos`.* FROM `comments` LEFT JOIN `photos` ON `photos`.`id` = `comments`.`mode_id`
SELECT `comments`.*, `posts`.* FROM `comments` LEFT JOIN `posts` ON `posts`.`id` = `comments`.`mode_id`

Так ли это?
Ну и дальше на стороне php обрабатывать, сортировать и исходя из полученных данных при JOIN собирать ссылку.

Моя задача усложнилась тогда, когда мне понадобилось из таблицы `feed_events` вывести все действия которые происходили с фотографиями, постами, новостями пользователя (я этот вопрос задавал тут)
Получается мне приходится также несколькими запросами собирать все данные по всем действиям... и дошла очередь до комментариев.
Получается, у меня к таблице `feed_events` выходит 7 запросов, один из которых такой (для комментариев):
SELECT fe.`user_id`, fe.`mode`, comm.`text`
FROM `feed_events` fe
INNER JOIN `comments` comm ON comm.`id` = fe.`mode_id`
WHERE fe.`mode` = 'comments' AND fe.`feed_user_id` = 111

И вот чтобы в этом случае мне вывести ссылку на фотографию, новость или пост, где был написан этот комментарий. Мне все равно как-то придется JOIN-ить таблицы `news`, `photos` или `posts`. И уже тут не получается соединить несколько возможных вариантов как я описывал выше.

Что же делать?
  • Вопрос задан
  • 131 просмотр
Решения вопроса 1
SELECT fe.`user_id`, comm.`text`, ph.id
FROM `feed_events` fe
INNER JOIN `comments` comm ON comm.`id` = fe.`mode_id`
INNER JOIN `photos` ph ON ph.id = comm.mode_id AND comm.mode = "photo"
WHERE fe.`mode` = 'comments' AND fe.`feed_user_id` = 111


примерно так. и так 3 раза(photos, news, posts) у тебя структура таблицы "вообще непонятная".
если тебе интересно изучать , могу книгу дать интересную по SQL

книга по практике sql бац
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы