有效地比较和显示 SQL 结果


Comparing and displaying SQL results efficiently

我有一个朋友,我正在帮助他。该论坛还有一个喊话箱,用于在SQL表中存储被禁止的用户ID(整数(的数据,何时被禁止的UNIX,以及他们被禁止的人(userid/integer(。该数据位于shoutbox表中。我正在尝试制作一个页面,论坛版主可以在其中查看被禁止的用户、被谁禁止以及何时被禁止。
假设表users是具有一列称为chat_banned的数据的表,该列根据用户是否被禁止存储一个变量,其中1被禁止,0为未被禁止。此数据位于两个不同的表中,其中shoutbox包含有关用户何时被禁止的信息,以及被禁止的用户 id 和禁止者的整数,users表示他们是否真的被禁止。
我不能简单地打印shoutbox表的结果的原因是,用户可能已被取消禁止,并且检查他或她是否被取消的唯一方法取消禁止是检查users表的chat_banned列中的变量。
有没有超级有效的方法来执行以下操作:

  • 构建一个包含某种所有被禁止用户的数组(为方便起见,我当前选择的数据是userid并从users username(。
  • 列出数组,其中包含禁止他/她的用户以及他或她被禁止的时间
  • 按 UNIX 时间从最近到最旧对此列表进行排序。

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

谢谢,头晕。

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

  • users
    • chat_banned(1 表示禁止,0 表示未禁止(
  • shoutbox
    • time(执行命令时的 UNIX 时间戳(
    • command(三个可能命令的命令日志,ban用于禁止用户,unban用于取消禁止用户,edit用于编辑喊叫(
    • userid(以整数形式执行命令的主持人的userid(
    • comment(被禁止的用户userid的整数(

从我的头顶上,您可能希望使用子查询来搜索实际被禁止的用户,并使用这些user_id从shoutbox数据库中获取所有信息。

 SELECT * FROM shoutbox WHERE comment IN (SELECT user_id FROM users WHERE chat_banned = 1)

此查询仅显示仍被禁止的用户的禁止活动:

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