2012-04-28 91 views
0

我有一位朋友正在与我协助的论坛。该论坛还有一个留言框,用于存储被禁止的用户标识符(整数)数据,被禁止的UNIX时间以及他们在SQL表中被(userid/integer)禁止的用户数据。该数据位于shoutbox表中。我试图制作一个页面,论坛版主可以去看看那些被禁止的用户,他们被禁止的用户以及他们被禁止的用户。
假设表users是一个表格,其中有一列数据,名为chat_banned,其中存储的变量取决于用户是否被禁止,其中1用于禁止,0用于禁止。该数据位于两个不同的表格中,其中shoutbox包含有关用户何时被禁止的信息,以及被禁止的用户ID的整数以及谁被禁止,以及如果他们实际上被禁止或拒绝。
我无法简单地打印shoutbox表的结果的原因是因为用户可能已被解除绑定,并且检查他或她的唯一方法是未被解除绑定,因此请检查users表的chat_banned列中的变量。
有什么超级有效的方法来做到以下几点:有效比较和显示SQL结果

  • 建立某种形式的所有禁止的用户数组(被选定我目前的数据是useridusernameusers为了方便)。
  • 列出禁止他/她的用户以及禁止他/她的时间的列表
  • 按UNIX时间从近期到最早排序此列表。

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

谢谢,晕了。

编辑:我想我会更有效地列出哪些表具有什么信息和它是什么。在这里你去:

  • users
    • chat_banned(1禁止,0为不被禁止)
  • shoutbox
    • time(在执行命令时的UNIX时间戳)
    • command(三个可能命令的命令日志, ban取缔用户,unban为unbanning用户,edit编辑留言)
    • userid(谁执行整数形式的命令)
    • comment(整数主持人userid用户的userid谁是被禁止)

回答

0

从我的头顶,你会想使用子查询来寻找谁是真正禁止用户和使用这些USER_ID的让您的所有信息进行上留言数据库的。

SELECT * FROM shoutbox WHERE comment IN (SELECT user_id FROM users WHERE chat_banned = 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 
+0

这是什么'府*'前缀代表和意味着什么呢? – 2012-04-29 01:04:18

+0

s,u和bu是参与查询的表的别名。别名不仅可以减少键入,而且还可以消除在查询必须引用具有相同名称的多个列或表时引用的对象。例如,此查询包含对用户表的第二次连接,以解析主持人的用户名,所以我们需要一个别名来区分它与其他连接。 – 2012-04-29 03:14:35

+0

啊,我明白了。我正在参加美国科学与工程巨星,所以我没有时间在明天早上进行测试,但从外观来看,这看起来就像我正在寻找的答案。我会报告发生了什么:) – 2012-04-29 05:59:15