MySQL抓取用户的所有帖子和每个帖子的所有喜欢(加入,分组,计数等)

Zac*_*old 2 php mysql join group-by relational

我正在构建一个论坛软件,我试图通过特定的"个人资料"获取所有帖子,抓住所有已经"喜欢"每个帖子("喜欢")的个人资料,然后第三次获取个人资料每个帖子都喜欢每个帖子(profile_name等等).

Table 1 - posts
---------------
post_id
profile_id (original poster)
content
...

Table 2 - like
--------------
profile_id
post_id

Table 3 - profiles
------------------
profile_id
profile_name
...
Run Code Online (Sandbox Code Playgroud)

一些规则:

  • 每个喜欢简直的关系post_idprofile_id
  • 个人资料不能像帖子一样多次
  • 个人资料不能像自己的帖子一样

如果使用PHP获取数据,我会坚持将所有类似profile_ids("likers")存储到数组中的步骤.这是我到目前为止:

SELECT post.*, COUNT(`like`.profile_id) AS like_count 
  FROM post LEFT OUTER JOIN `like` ON post.post_id = `like`.post_id 
    WHERE post.profile_id = "'.$this->profile_id.'" GROUP BY post.post_id
Run Code Online (Sandbox Code Playgroud)

提前致谢.如果我发现任何错误,或者有任何错误指出,我会尝试更新.

Lev*_*lho 5

要选择特定配置文件中的所有帖子,您只需执行以下查询:

SELECT *
FROM posts
WHERE profile_id = (the id number)
Run Code Online (Sandbox Code Playgroud)

要获取所有喜欢给定帖子的个人资料及其数据,您可以执行以下操作:

SELECT *
FROM profiles
WHERE profile_id IN (
    SELECT profile_id
    FROM like
    WHERE post_id = (the post id number) )
Run Code Online (Sandbox Code Playgroud)

将这两个查询与IN结合使用,您可以指定一个配置文件,并获取所有喜欢该人员个人资料上任何帖子的人的个人资料数据.查询看起来像这样

SELECT *
FROM posts
WHERE profile_id = (the id number)
Run Code Online (Sandbox Code Playgroud)

要获取所有喜欢给定帖子的个人资料及其数据,您可以执行以下操作:

SELECT *
FROM profiles
WHERE profile_id IN (
    SELECT profile_id
    FROM like
    WHERE post_id IN (
        SELECT post_id
        FROM posts
        WHERE profile_id = (the id number) )
Run Code Online (Sandbox Code Playgroud)

如果您想获取帖子信息列表以及所有喜欢每个帖子和帖子本身的人的个人资料数据,您可以按如下方式使用JOIN ...

SELECT *
FROM profiles JOIN posts ON (profiles.post_id = posts.post_id)
WHERE ...
Run Code Online (Sandbox Code Playgroud)

...它只是将两个表中的数据聚合成一个查询.然后,您将根据需要提取数据以使用PHP进行处理.

如果你想实现诸如用户不喜欢他或她自己的帖子之类的规则,你必须把它写入你的php,当有人试图想要一个帖子时,验证它是否是他或她自己的.例如,您不希望允许某人喜欢帖子,将其写入数据库,然后在加载页面时通过查询验证该人是否有权这样做.