加入帖子详细信息以喜欢查询

时间:2019-04-18 07:02:17

标签: mysql sql

我有两个表,称为帖子和点赞。

我正在尝试让所有当前用户(登录用户)喜欢+用户喜欢的目标帖子的详细信息。

Likes表中的

post_id 与posts表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,

帖子表列= id,标题,正文,图像,创建日期

2 个答案:

答案 0 :(得分:1)

您的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;

答案 1 :(得分:1)

查询问题的一部分是SQL查询中有保留的关键字,喜欢是其中之一,以及SELECT,VALUE,WHERE IN,ON IF。

Full list of reserved words

当列名或引用与保留字冲突时,您必须将其以非常强调的形式(`)包裹起来,以免被解析为条件。

  

`-急性,反引号,重音,重音,左引号,开式引号或推入式

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,即使没有类似记录可供选择,左联接也可确保您获取帖子数据。帖子以及与用户ID相匹配的帖子。

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;