У меня есть веб-приложение, в котором пользователи могут делать сообщения, а другие пользователи могут делать комментарии. Я использую базу данных MySQL для хранения моих данных. В настоящее время у меня есть две таблицы. Один имеет все сообщения и один имеет все комментарии. У меня есть внешний ключ postID в моей таблице комментариев. Мой вопрос сейчас заключается в том, как я могу получить данные из базы данных обратно в мое приложение. Я пробовал следующий запрос, но он не работает. Я объясню почему через минуту. Вот запрос, который я пробовал: SELECT posts.title, posts.body, comments.userID, comments.comment FROM posts INNER JOIN comments ON posts.postID = comments.postID WHERE posts.postID = comingfromwebapp. Проблема в том, что если нулевых комментариев нет, ничего не приходит. И если есть несколько комментариев, а сообщение слишком большое, результат запроса слишком велик, потому что в каждой строке я получаю один и тот же posts.body для каждого комментария. Как правильно это реализовать? Я довольно новичок в базах данных SQL и раньше использовал только NOSQL.

0
itsundefined 28 Май 2017 в 12:16

2 ответа

Лучший ответ

Для этого у нас есть LEFT OUTER JOIN.

Это вернет по крайней мере сообщение, даже если в системе еще нет комментариев (будьте осторожны: ваши комментарии. * Значения будут возвращаться как NULL - вы должны быть готовы к этому)

SELECT posts.title, posts.body, comments.userID, comments.comment 
   FROM posts 
  LEFT OUTER JOIN comments ON posts.postID = comments.postID 
WHERE posts.postID = comingfromwebapp

< Сильный > НО

Это приведет к получению полного заголовка и тела сообщения для каждого комментария к одному сообщению. Что излишне.

Возможно, вы захотите создать один SQL для извлечения данных поста и один (который может вернуть 0 строк) для извлечения всех комментариев для этого идентификатора поста:

SELECT posts.title, posts.body
   FROM posts WHERE postid = commingfromwebapp

(показать свой пост)

SELECT comments.userID, comments.comment 
   FROM  comments WHERE comments.postID = comingfromwebapp

(показать все комментарии, если они есть)

3
Jan 28 Май 2017 в 09:26

Я предлагаю использовать два разных запроса. 1 - чтобы получить сообщения, 2 - чтобы получить их комментарии.

При отображении в вашем приложении вы можете комбинировать их

1
nilesh 28 Май 2017 в 09:26