有效地比较和显示SQL结果

时间:2012-04-28 19:32:39

标签: php sql

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

  • 构建一个包含所有被禁用户的数组(为方便起见,我userid选择的当前数据为usernameusers
  • 使用禁止他/她的用户以及禁止他/她的时间列出数组
  • 按UNIX时间从最近到最旧排序此列表。

我已经有了一个基本的页面设置,所以如果你想查看它的示例基本功能,我很乐意在这里发布,看看有没有办法简单地编辑我已建立的页面有效地完成这个。

谢谢,Dizzy。

编辑:我想我会更有效地列出哪些表有什么信息它是什么。你走了:

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

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分: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