помощь с JOIN в mysql

#php #mysql

#php #mysql

Вопрос:

Как в MySQL, я хочу получить результаты из таблицы post. Я делаю это идеально. Однако я хотел бы получить индивидуальные лайки из таблицы like и комментарии из таблицы Comments.

Как я мог бы это сделать, используя функцию JOIN? У каждой из таблиц есть общий postID (идентификатор для записей таблицы).

Комментарии:

1. Вы можете найти всю необходимую информацию о joins здесь

Ответ №1:

Не используйте join, получайте сообщения, затем для каждого сообщения получайте лайки и комментарии отдельно.

Псевдокод:

  • Получить все сообщения
    • Объявите массив для их хранения в
    • Повторите выбранные сообщения, и для каждого из них:
      • Получайте «лайки» и «комментарии» отдельно от сообщений (т. е. в их собственных запросах). Получите их в виде массива. Добавьте их в массив posts следующим образом $posts['likes'] = $likes .
      • Преобразуйте созданный массив в json и повторите его: echo json_encode($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. Верно, это действительно отвечает на заданный вопрос.