【发布时间】: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也相同?如果是这种情况,您可能需要为操作类型使用单独的表。 -
管理员用户始终存在于系统中,因为它是在安装过程中创建的默认用户。