【问题标题】:MySQL Filter resultsMySQL过滤结果
【发布时间】:2011-01-12 13:12:22
【问题描述】:

我的 SQL 中有一个表,其结构如下,称为操作:

+----+--------+------+---------+
| id | action | type | user_id |
+----+--------+------+---------+
|  1 |      5 |    4 |       1 | 
|  2 |      6 |    4 |       1 | 
|  3 |      5 |    4 |       2 | 
|  4 |      0 |    0 |       2 | 
|  5 |      0 |    1 |       2 | 
+----+--------+------+---------+

我有这样的用户表:

+----+------------+----------------------------------+----------+
| id | fullname   | password                         | username |
+----+------------+----------------------------------+----------+
|  1 | Admin User | xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx | admin    | 
|  2 | Arthur     | xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx | arthur   | 
|  3 | john       | xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx | john     | 
+----+------------+----------------------------------+----------+

我想从操作表中选择除管理员操作之外的所有操作,我尝试过这样做:

SELECT * FROM actions WHERE user_id != 1;

但这在某些情况下不起作用,因为管理员 user_id 并不总是 1。

我将如何选择除管理操作之外的所有操作,我尝试过使用 JOINS 但无法弄清楚。

希望你明白我的意思。

干杯

伊夫

【问题讨论】:

  • 为了回答这个问题,需要更多信息。最重要的是:如果管理员不总是有user_id = 1,你怎么知道用户是否是管理员。我们应该使用username = admin 吗?顺便说一句:type 是什么意思?如果在两行中action 相同,这是否意味着type 也相同?如果是这种情况,您可能需要为操作类型使用单独的表。
  • 管理员用户始终存在于系统中,因为它是在安装过程中创建的默认用户。

标签: sql mysql join filter


【解决方案1】:
SELECT * FROM actions inner join users
on actions.user_id = users.id 
WHERE users.username != "admin";

假设所有管理员都有用户名“admin”

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-03
    • 2021-12-06
    • 1970-01-01
    • 1970-01-01
    • 2017-12-15
    • 2011-10-05
    相关资源
    最近更新 更多