[英]How to create sql query for the three tables in one statement?
我正在創建一個小網站。 假設它具有下表
Table User
user_id | user_name
1 | a
2 | b
3 | c
Table Post
post_id | user_id (fk)
1 | 1
2 | 3
3 | 2
4 | 2
Table Block
block_by_user_id | blocked_user_id (fk)
1 | 2
我想在主頁上顯示所有帖子。 例如,當前用戶是user 1
該用戶必須查看除來自user 2
帖子之外的所有帖子,因為正如您在“ 阻止”表中看到的那樣,用戶1阻止了用戶2。
假設當前用戶會話為$_SESSION['userid']
。
查詢應該如何? 性能考慮。
這是到目前為止我嘗試過的方法,但是我認為這可能不是最佳實踐。
select * from Post where user_id not in (select blocked_user_id from Block where block_by_user_id = '$_SESSION[userid]')
我是新手。 非常感謝!
解決方案是:
SELECT *
FROM posts p
LEFT JOIN blocks b
ON p.user_id = b.blocked_user_id
AND b.block_by_user_id = 1
WHERE b.block_id IS NULL;
您需要在blocks表中添加一個block_id。 您加入被阻止的用戶,並按block_id IS NULL過濾它們。 如果您有任何疑問,請發表評論。
就可讀性而言,您自己的查詢優於建議的答案-這就是SQL的全部意義。
繼續查詢; 它非常適合該任務,因為它應如下所示:“選擇除來自當前用戶阻止的用戶的帖子以外的所有帖子”。
核實-
SELECT usr.user_id,pst.post_id
FROM users AS usr
JOIN posts pst ON pst.user_id=usr.user_id
LEFT JOIN block blk ON usr.user_id=blk.blocked_user_id
WHERE blk.id IS NULL;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.