0

フォーラムを手伝っている友人がいます。このフォーラムには、禁止されたユーザー ID (整数)、禁止されたときの UNIX、および禁止されたユーザー (ユーザー ID/整数) のデータを SQL テーブルに格納するシャウトボックスもあります。そのデータはshoutbox表にあります。フォーラムのモデレーターが、禁止されたユーザー、禁止されたユーザー、禁止された時期を確認できるページを作成しようとしています。テーブルは、ユーザーが禁止されているかどうかに応じて、禁止されているかどうかに応じて変数を格納するというデータの列を持つテーブルである
としましょう。このデータは 2 つの異なるテーブルにあります。userschat_banned10shoutboxユーザーがいつ禁止されたかに関する情報と、禁止されたユーザーの ID と禁止を行ったユーザーの整数が含まれ、users実際に禁止されているかどうかが示されます。
表だけの結果を単純に印刷できない理由shoutboxは、ユーザーが禁止解除された可能性があり、禁止解除されていないことを確認する唯一の方法は、表のchat_banned列の変数を確認することだからです。以下を行うための非常に効率的な方法はありますか?users

  • 禁止されたすべてのユーザーのある種の配列を構築します(便宜上、選択されている現在のデータはuseridand usernamefromusersです)。
  • 彼/彼女を禁止したユーザーとそのユーザーがいつ禁止されたかを配列にリストします
  • このリストを UNIX 時間で最近のものから古いものの順に並べ替えます。

私はすでに基本的なページ設定を行っているので、サンプルベース機能を見たい場合は、ここに投稿して、作成したページを簡単に編集してこれを効率的に完了する方法がないかどうかを確認してください。 .

ありがとう、ディジー。

編集:どのテーブルにどのような情報があり、それが何であるかをもう少し効率的にリストアップすると思いました。どうぞ:

  • users
    • chat_banned(禁止されている場合は 1、禁止されていない場合は 0)
  • shoutbox
    • time(コマンド実行時のUNIXタイムスタンプ)
    • commandban(ユーザーの禁止、ユーザーの禁止unban解除、editシャウトの編集の 3 つの可能なコマンドのコマンド ログ)
    • userid(userid整数形式でコマンドを実行したモデレーターの)
    • commentuserid(禁止されているユーザーの整数)
4

2 に答える 2

0

このクエリは、まだ禁止されているユーザーの禁止アクティビティのみを表示します。

SELECT u.username, s.time, s.command, bu.username AS moderator
FROM shoutbox s 
INNER JOIN users u
ON u.userid = s.comment
INNER JOIN users bu
ON bu.userid = s.userid
WHERE u.chatbanned = 1
AND s.command = 'ban'
ORDER BY s.time DESC
于 2012-04-28T21:42:10.360 に答える
0

頭のてっぺんから、サブクエリを使用して実際に禁止されているユーザーを検索し、それらの user_id を使用して、シャウトボックス データベースからすべての情報を取得したいと考えています。

 SELECT * FROM shoutbox WHERE comment IN (SELECT user_id FROM users WHERE chat_banned = 1)
于 2012-04-28T20:06:24.170 に答える