2012-07-11 92 views
2

我是一名Web開發學生,我遇到了MySQL語句的問題。我被一個遊戲社區要求創建一些小網站,他們可以看到他們禁止哪些人。PHP/MySQL:從表中選擇相同的列,但具有不同的主ID

有兩張表,我使用'帳戶'和'禁令'。賬戶的佈局有點像這個

account_id username (more columns) 
----  ----  ---- 
1   hey  ... 
2   hdf  ... 
3   sdf  ... 
4   admin  ... 

「禁令」的佈局是:

ban_id  account_id bannedby_id (more columns) 
----  ----   ----   ---- 
1   1    4    ... 
2   3    4    ... 

在這種情況下,ID爲4的管理員已經與ID 1和3。我想禁止賬戶創建一個查詢,其中包含被禁止的人員的姓名以及在單個結果中禁止他的管理員的姓名。

我現在做到這一點,首先做的:

SELECT bans.*, accounts.username FROM bans, accounts WHERE accounts.account_id = bans.account_id 

然後遍歷所有結果,然後從結果我得到了選擇的管理員名稱:

while($baninfo = mysql_fetch_assoc($sqlBans)) 
{ 
    mysql_query("SELECT username FROM accounts WHERE account_id = '" . $baninfo['bannedby_id'] . "'"); 
} 

這個工作,但我不認爲這是做到這一點的正確方法。我認爲必須有一個可以做這樣的查詢的MySQL函數,但是我已經在Google上搜索了它並且找不到它。

只要是明確的,這裏就是我想從查詢得到的結果:

ban_id account_id account_username bannedby_id admin_username (other columns from Bans table) 
----  ----   ----    ----   ----    ---- 
1  1   hey    4    admin   ... 
2  3   sdf    4    admin   ... 

對不起,如果這是一個非常愚蠢的問題,但我可以解決這個問題。我希望你們對我有一個解決方案。我使用這個網站很多,因爲我遇到小問題,它總是有很好的答案。

問候, 馬克

回答

0
select b.ban_id, 
    b.account_id, 
    a.username as account_username, 
    b.bannedby_id, 
    a2.username as admin_username, 
from bans b 
inner join accounts a on b.account_id = a.account_id 
inner join accounts a2 on b.bannedby_id = a2.account_id 
+0

嘿感謝您的快速答覆!它按預期工作。我應該看看INNER JOIN功能。 – user1518750 2012-07-11 19:39:45

1

使用這些賬戶表的兩倍 - 每個作爲內嵌視圖和seperately加入。

select a.username as banned, b.username as by_who 
from accounts a, accounts b, ban 
where a.account_id = ban.account_id 
and b.account_id = ban.account_id 
1

你想要的是一個JOIN操作:

SELECT ban_id, banned.account_id, banned.username AS account_username, 
    bannedby_id, admin.username AS admin_username, etc.... 
FROM bans 
LEFT JOIN accounts AS banned ON banned.account_id = bans.account_id 
LEFT JOIN accounts AS admin ON banned.banned_by = admin.account_id 
0

嘗試

SELECT b.ban_id, ac.account_id, ac.username AS banned, b.bannedby_id AS mod FROM accounts ac, bans b WHERE ac.account_id = b.account_id ORDER BY b.bannedby_id DESC 
相關問題