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 бац
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
ИТЦ Аусферр Магнитогорск
от 100 000 до 160 000 ₽
25 апр. 2024, в 11:49
25000 руб./за проект
25 апр. 2024, в 11:37
40000 руб./за проект