簡體   English   中英

MySQL / PHP:從三個表中查找匹配的記錄(論壇權限)

[英]MySQL/PHP: Looking for matching records from three tables(Forum permissions)

也許我沒有在Google或SOF.com中正確輸入搜索內容,但也許有人願意提供幫助。 我知道這不是最好的方法,但是我正在學習,希望有人可以以此方式提供幫助。 我在PHP / MySQL中有一個論壇系統。 論壇設置為具有ID列。

我現在也有2張桌子。 一個是組表,另一個是論壇權限表。 組表具有一個ID列和一個user_id列,均為int。 論壇權限表具有一個ID,forum_id和group_id。 基本上,我正在嘗試查找用戶是否屬於某個組(“組表”),以及是否允許該組位於該論壇(“論壇權限表”)中。 問題在於用戶可以屬於多個組,並且每個論壇可以分配有多個組。

是否存在一個查詢,該查詢基本上只能搜索三個表並區分用戶是否可以訪問論壇? 如果只是一個論壇對一個論壇,或者每個用戶一個論壇,我可以弄清楚這一點,但是在這種情況下,我很困惑。

有什么幫助嗎? 下表結構示例:

這是論壇表

Forum_ID || Forum_Name  
 1       ||| General tal

ķ

對於組表:

Group_id ||| Group_name     ||| User_ID  
1        ||| Administrators ||| 2  

對於論壇權限表(Forum_ID對應於Forums表中的Forum_ID,Group_To_Allow對應於groups表上的Group_ID):

ID ||| Forum_ID ||| Group_To_Allow  
1  ||| 1        ||| 1  

最好的格式是我能做的。

編輯:

好的,我通過InnerJoin弄清楚了。 因此,使用上面的表結構:

SELECT *
FROM forum_perm
INNER JOIN membergroups
ON forum_perm.forum_groupallow=membergroups.group_id
WHERE forum_perm.forum_id = 1 AND membergroups.user_id = 6
LIMIT 0,1  

Forum_perm.forum_id = 1是要檢查該組的論壇的ID號。 Membergroups.user_id = 6是屬於該組的用戶ID號。 限制0,1將限制結果只返回一個結果,而不是一遍又一遍地循環。 這是很好的,因為在PHP中,如果MySQL遍歷所有結果並找到不匹配的一組,它仍將返回false。 希望這對嘗試實現類似目標的人有所幫助。

您可以創建一個JOIN語句,並僅從所需的特定行中使用MAX()選擇最大值。 我不知道您的確切表結構,也不知道您在擁有論壇權限的情況下是如何進行的。 如果您的用戶表中只有一列(我想就是這樣,因為通常就是這種情況),則可以在IN語句(WHERE字段IN(...))中使用它。 mysql,嘿,取這個字段的值(如果這個字段的值是逗號分隔的),我從來沒有做過,所以我不知道它的工作原理。

也許您應該從phpmyadmin中的表中獲取一些屏幕截圖,以便我們為您提供更准確,更具體的信息。

編輯:它確實與只拋出列的名稱一起工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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