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

时间:2012-01-05 08:43:24

标签: 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
...

一些规则:

  • 每个人都只是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

先谢谢了。如果我发现任何错误,或者有任何错误指示给我,我会尝试更新。

1 个答案:

答案 0 :(得分:5)

要选择特定个人资料中的所有帖子,您只需执行以下查询:

SELECT *
FROM posts
WHERE profile_id = (the id number)

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

SELECT *
FROM profiles
WHERE profile_id IN (
    SELECT profile_id
    FROM like
    WHERE post_id = (the post id number) )

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

SELECT *
FROM posts
WHERE profile_id = (the id number)

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

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) )

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

SELECT *
FROM profiles JOIN posts ON (profiles.post_id = posts.post_id)
WHERE ...

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

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