#php #mysql
#php #mysql
Вопрос:
Как в MySQL, я хочу получить результаты из таблицы post. Я делаю это идеально. Однако я хотел бы получить индивидуальные лайки из таблицы like и комментарии из таблицы Comments.
Как я мог бы это сделать, используя функцию JOIN? У каждой из таблиц есть общий postID (идентификатор для записей таблицы).
Комментарии:
1. Вы можете найти всю необходимую информацию о joins здесь
Ответ №1:
Не используйте join, получайте сообщения, затем для каждого сообщения получайте лайки и комментарии отдельно.
Псевдокод:
- Получить все сообщения
- Объявите массив для их хранения в
- Повторите выбранные сообщения, и для каждого из них:
- Получайте «лайки» и «комментарии» отдельно от сообщений (т. е. в их собственных запросах). Получите их в виде массива. Добавьте их в массив posts следующим образом
$posts['likes'] = $likes
. - Преобразуйте созданный массив в json и повторите его:
echo json_encode($posts)
- Получайте «лайки» и «комментарии» отдельно от сообщений (т. е. в их собственных запросах). Получите их в виде массива. Добавьте их в массив posts следующим образом
Комментарии:
1. Затем я все же вывожу результаты в формате JSON.
2. Если вы используете JSON, создайте объект-оболочку, который содержит информацию о публикации, лайки и комментарии как отдельные свойства объекта-оболочки.
3. Кроме того, одна идея, если вы хотите избежать множественных запросов к БД, выполните цикл по первому списку записей, создайте массив идентификаторов записей с данными, которые у вас уже есть, затем выполните один запрос, чтобы получить все лайки для списка идентификаторов записей, а затем обработайте результаты с соответствующим идентификатором записи обратно в исходный массив. сделайте то же самое для комментариев.
4. Просто вопрос по этому поводу. Является ли это «правильным способом» подхода к подобной ситуации, или это противоречит концепции реляционных баз данных?
5. Я никак не могу прочитать весь этот код внутри комментария. Если эта проблема достаточно отличается от текущей, пожалуйста, рассмотрите возможность открытия нового вопроса по этому поводу?
Ответ №2:
SELECT * FROM `posts`
INNER JOIN `comments` ON `comments`.`postId` = `posts`.`postId`
INNER JOIN `likes` ON `likes`.`postId` = `posts`.`postId`
WHERE `posts`.`postId` = ?
Комментарии:
1. Это неправда. Объединения в этом запросе ограничены условиями в операторах ON внутри объединений.
2. да, но если у вас есть пост с 5 комментариями и 10 лайками, вы получите 50 строк для этого поста.
3. Верно, но это то, что было запрошено в вопросе. Мой ответ отвечает на первоначальный вопрос, но ответ Майкла Робинсона является лучшим общим решением.
4. @KOGI Я полагаю, что это декартово, не так ли? Каждая результирующая строка будет содержать сообщение, некоторые строки будут содержать комментарий, а некоторые — лайк.
5. Верно, это действительно отвечает на заданный вопрос.