2

私はWeb開発の学生ですが、MySQLステートメントで問題が発生しました。私はゲームコミュニティから、禁止されている人を確認できる小さなWebサイトを作成するように依頼されました。

私が使用するテーブルには、「アカウント」と「禁止」の2つがあります。アカウントのレイアウトはこんな感じです

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

'bans'のレイアウトは次のとおりです。

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

この場合、ID4の管理者がID1と3のアカウントを禁止しました。禁止された人の名前と、禁止した管理者の名前の両方を1つの結果に含めるクエリを作成します。

私は今、最初にこれを行うことによってこれを行います:

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            ...

これが非常に愚かな質問である場合は申し訳ありませんが、私はそれを解決することができます。皆さんが私のための解決策を持っていることを願っています。私は小さな問題に遭遇し、それは常に素晴らしい答えを持っているので、私はこのウェブサイトを頻繁に使用しています。

よろしく、マーク

4

4 に答える 4

1

アカウントテーブルを2回使用します。それぞれをインラインビューとして使用し、個別に結合します。

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
于 2012-07-11T19:28:24.437 に答える
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
于 2012-07-11T19:29:21.027 に答える
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
于 2012-07-11T19:28:04.330 に答える
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
于 2012-07-11T19:31:27.003 に答える