php - MySQL 抓取用户的所有帖子以及每个帖子的所有点赞(加入、分组、计数等)

标签 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 (“喜欢者”)存储到数组中的步骤。这是我到目前为止所拥有的:

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

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

最佳答案

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

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 中,这样当有人尝试喜欢某个帖子时,就会验证该帖子是否是他或她的自己的。例如,您不希望允许某人喜欢某个帖子,将喜欢的内容写入数据库,然后在加载页面时通过查询验证该人是否有权这样做。

关于php - MySQL 抓取用户的所有帖子以及每个帖子的所有点赞(加入、分组、计数等),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8739715/

相关文章:

php - 如何强制 PHP Mongo 驱动程序将结果作为对象而不是数组返回

PHP日历,每周总小时数并一一回显

mysql - 从每小时获取三个随机日期

mysql - 从连接表中获取最大日期

mysql - LEFT JOIN 上的 GROUP_CONCAT 针对 NULL 生成组

javascript - 如何根据地址动态 `generate` 谷歌地图?

php - INSERT 后 FOREIGN KEY 未完成列 (PHP)

php - 在 python 中反序列化 PHP 数据

mysql - 仅在 MariaDB 中插入时包含时间戳字段,并结合 'LOAD DATA LOCAL INFILE' 数据加载

mysql - 如何在没有 ON 条件的情况下使用 mysql JOIN?