簡體   English   中英

如何在一個語句中為三個表創建sql查詢?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM