php Facebook类似的发布系统,获取发布数据错误

3lxsmp7m  于 2023-06-28  发布在  PHP
关注(0)|答案(2)|浏览(110)

我有两张table和朋友。我想得到我的朋友的所有职位,但不包括从后表块的朋友。我使用了所有的左连接,右连接,内连接,但查询返回所有数据,包括块友元数据。我只想朋友的数据是不像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 |
------------------------------------------------

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

gtlvzcf8

gtlvzcf81#

您的查询看起来很好。为什么要做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
pxiryf3j

pxiryf3j2#

尝试:
select p. * from post p LEFT JOIN friends f on p.user_id = f.user_id where f.block!=1
这将为您提供未被阻止的朋友的数据。如果需要,可以在where子句中添加不同的检查。但这是您的问题需求的最简单的解决方案,即。“* 我想得到我的朋友的所有职位,但不包括从帖子表块的朋友。*”

相关问题