Друзья, не дайте загинуть в пучине неведания... Постарайтесь вникнуть в вопрос, хоть он и большой, ибо я уже не знаю что делать.
В каждом своем вопросе я затрагиваю эту тему косвенно, но сейчас столкнулся напрямую...
Дело вот в чем. На сайте пользователь может написать комментарий к:
новости, фотографии,
посту и еще куча всяких страниц. Остановимся на этих трех.
В базе MySQL комментарии хранятся в таблице так:
Фотографии, новости и посты хранятся соответственно каждый в своих таблицах.
Получается, чтобы получить комментарии к новости с 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`. И уже тут не получается соединить несколько возможных вариантов как я описывал выше.
Что же делать?