Задать вопрос
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`. И уже тут не получается соединить несколько возможных вариантов как я описывал выше.

Что же делать?
  • Вопрос задан
  • 135 просмотров
Подписаться 1 Оценить Комментировать
Помогут разобраться в теме Все курсы
  • Skillfactory
    Профессия Fullstack веб-разработчик на JavaScript и PHP
    20 месяцев
    Далее
  • Хекслет
    PHP-разработчик
    10 месяцев
    Далее
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
Решения вопроса 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 бац
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы
FoodSoul Калининград
от 180 000 до 250 000 ₽
IT-Spirit Москва
от 230 000 до 320 000 ₽
от 200 000 до 290 000 ₽