我正在构建一个论坛软件,并试图抓取特定“个人资料”的所有帖子,抓取所有“喜欢”每个帖子的个人资料(“喜欢者”),然后第三次获取该帖子喜欢每个帖子的每个个人资料的个人资料数据(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_id
和profile_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/