【问题标题】:Facebook like post system. Get post data errorFacebook 喜欢发帖系统。获取帖子数据错误
【发布时间】:2021-04-05 03:15:48
【问题描述】:

我有 2 张桌子帖子和朋友。我想获取我朋友的所有帖子,但不包括帖子表中的阻止朋友。我使用所有左、右、内连接,但查询返回所有数据,包括块朋友数据。我只想要没有像 facebook 系统那样阻塞的朋友数据。我的表结构是

1.发布表

|post_id|user_id|content|image|is_delete|created|
-------------------------------------------------
| 1 | 1 | hello | 0 | 0 | 2020-12-23 11:12:11 |
-------------------------------------------------
| 2 | 2 | hi1 | 0 | 0 | 2020-12-24 13:33:42 |
-------------------------------------------------
| 3 | 3 | hi2 | 0 | 0 | 2020-12-24 13:33:42 |
-------------------------------------------------
| 3 | 4 | hi3 | 0 | 0 | 2020-12-24 13:33:42 |
-------------------------------------------------

2。朋友桌

|id|user_id|request_id|status|block|created|
--------------------------------------------
| 1 | 1 | 2 | 2 | 1 | 2020-12-23 11:23:23 |
--------------------------------------------
| 1 | 3 | 1 | 2 | 0 | 2020-12-23 11:33:33 |
--------------------------------------------
| 1 | 4 | 1 | 2 | 0 | 2020-12-23 11:33:33 |
--------------------------------------------

我的sql查询是

select 
    * 
from 
    post p 
left join 
    friends f on (p.user_id = f.user_id or p.user_id = f.request_id) 
where 
    ((f.user_id = '1' OR f.request_id = '1') 
    and f.status = '2' 
    and f.block !=1 
    and p.is_delete !=1)

我已将查询更改为阅读 stackoverflow 问题和评论,但结果与下面相同

查询-

select 
    * 
from 
    post p 
left join 
    friends f on (p.user_id = f.user_id or p.user_id = f.request_id) 
    and f.status = '2' and f.block !=1 
where 
    ((f.user_id = '1' OR f.request_id = '1') 
    and p.is_delete !=1)

结果是

|post_id|user_id|content|image|is_delete|created|
-------------------------------------------------
| 1 | 1 | hello | 0 | 0 | 2020-12-23 11:12:11 |
------------------------------------------------
| 2 | 2 | hi1 | 0 | 0 | 2020-12-24 13:33:42 |
------------------------------------------------
| 3 | 3 | hi2 | 0 | 0 | 2020-12-24 13:33:42 |
------------------------------------------------
| 3 | 4 | hi3 | 0 | 0 | 2020-12-24 13:33:42 |
-----------------------------------------------

但我想要这个结果

|post_id|user_id|content|image|is_delete|created|
-------------------------------------------------
| 1 | 1 | hello | 0 | 0 | 2020-12-23 11:12:11 |
------------------------------------------------
| 3 | 3 | hi2 | 0 | 0 | 2020-12-24 13:33:42 |
------------------------------------------------
| 3 | 4 | hi3 | 0 | 0 | 2020-12-24 13:33:42 |
------------------------------------------------

请告诉我查询中有什么问题。感谢您的帮助

【问题讨论】:

  • 你可以简单地删除块上的友谊。
  • 我也做过类似的项目,您可以访问以获得更多想法。 socialcodia.com/famblah谢谢
  • 如果您想要朋友的帖子,为什么要post_id = 1?你的问题不清楚你真正想要什么。

标签: php mysql sql


【解决方案1】:

您的查询看起来不错。但是你为什么要做LEFT JOIN?不需要。

尝试以下查询:

select p.* 
from post p 
join friends f on p.user_id in (f.user_id,f.request_id) 
where '1' in (f.user_id,f.request_id) 
    and f.status = '2' 
    and f.block != 1 
    and p.is_delete !=1

【讨论】:

    【解决方案2】:

    试试:

    选择 p.* 从 p.user_id = f.user_id 上的帖子 p LEFT JOIN 朋友 f 其中 f.block !=1

    这将是未被阻止的朋友的数据。 如果需要,您可以在 where 子句中添加不同的检查。 但这是您问题要求的最简单解决方案,即“我想获取我朋友的所有帖子,但不包括来自帖子表的阻止朋友。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多