Присоединиться к сообщению подробно, чтобы как запрос - PullRequest
1 голос
/ 18 апреля 2019

У меня есть две таблицы, называемые публикациями и лайками.

Я пытаюсь получить лайки всех текущих пользователей (вошедших в систему) + детализацию целевой записи, которая нравится пользователю.

post_id в таблице лайков имеет отношение к идентификатору таблицы сообщений.

Что такое правильный запрос?

SELECT post.id,post.author,post.title,post.body,post.image,post.created_date
FROM posts post, likes like
WHERE like.user_id = :user_id;
                        "

любит столбцы таблицы = user_id, post_id,

столбцы таблицы записей = идентификатор, заголовок, тело, изображение, дата создания

Ответы [ 2 ]

1 голос
/ 18 апреля 2019

Часть вашей проблемы с запросом состоит в том, что в запросах SQL есть зарезервированные ключевые слова, LIKE - это одно из них, а также SELECT, VALUE, WHERE IN, ON IF.

Полный список зарезервированных слов

Когда имя столбца или ссылка конфликтуют с зарезервированным словом, вы должны заключить его в острый акцент (`), чтобы оно не анализировалось как условие.

`- Острая, обратная кавычка, могила, серьезный акцент, левая цитата, открытая цитата или толчок

SELECT post.id,post.author,post.title,post.body,post.image,post.created_date
FROM posts post, likes `like`
WHERE `like`.user_id = :user_id;

Лично я всегда заключаю все свои столбцы и ссылки, чтобы быть уверенным, и использую полные подробные запросы:

SELECT `post`.`id`, `post`.`author`, `post`.`title`, `post`.`body`, `post`.`image`, `post`.`created_date`
FROM `posts` AS `post`, `likes` AS `like`
WHERE `like`.`user_id` = :user_id;

Чтобы ваш запрос работал, вы должны использовать LEFT JOIN на likes. Левое соединение гарантирует, что вы получите свои данные поста, даже если нет похожих записей для выбора, Вы должны получить лайки для поста и где сообщение совпадает с идентификатором пользователя.

SELECT `post`.`id`, `post`.`author`, `post`.`title`, `post`.`body`, `post`.`image`, `post`.`created_date`
FROM `posts` AS `post`
LEFT JOIN `likes` AS `like` ON `like`.`post_id` = `post`.`id`
WHERE `post`.`user_id` = :user_id;
1 голос
/ 18 апреля 2019

Вам необходимо явное условие для JOIN. Также обратите внимание, что , синтаксис объединения давно устарел, и вам действительно следует использовать явный синтаксис JOIN:

SELECT p.id, p.author, p.title, p.body, p.image, p.created_date
FROM posts p
JOIN likes l ON l.post_id = p.id
WHERE l.user_id = :user_id;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...