0

我有一个朋友,我正在帮助一个论坛。所述论坛还有一个留言框,它在 SQL 表中存储已被禁止的用户 ID(整数)、UNIX 何时被禁止以及被谁(用户 ID/整数)禁止的数据。该数据在shoutbox表中。我正在尝试创建一个页面,让论坛版主可以查看被禁止的用户、被禁止的用户以及被禁止的时间。
假设该表users是具有称为数据列的表,该数据列chat_banned存储一个变量,具体取决于用户是否被1禁止和0未禁止的位置。该数据位于两个不同的表中shoutbox包含有关用户何时被禁止的信息,以及被禁止的用户 ID 的整数,以及谁进行了禁止,并users说明他们是否真的被禁止。
我不能简单地打印shoutbox表的结果的原因是因为用户可能已被取消禁止,而检查他或她是否未被禁止的唯一方法是检查表chat_banned列中的变量users
是否有任何超级有效的方法来执行以下操作:

  • 构建某种所有被禁止用户的数组(为方便起见,我当前选择的数据是useridusernamefrom users)。
  • 列出禁止他/她的用户以及他/她何时被禁止的数组
  • 按 UNIX 时间从最近到最旧对该列表进行排序。

我已经有了一个基本的页面设置,所以如果您想查看它的示例基本功能,我很乐意在这里发布它,看看是否有任何方法可以简单地编辑我已经建立的页面以有效地完成这个.

谢谢,头晕。

编辑:我想我会更有效地列出什么表有什么信息以及它是什么。干得好:

  • users
    • chat_banned(1为禁止,0为未禁止)
  • shoutbox
    • time(执行命令时的 UNIX 时间戳)
    • command(三个可能的命令的命令日志,ban用于禁止用户,unban用于取消禁止用户,edit编辑喊叫)
    • useriduserid以整数形式执行命令的版主)
    • 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 回答