SQL の 1 つのコマンドで、ユーザーが 1 つのドキュメントにアクセスできるかどうかを確認しようとしています。checkAccess() 関数に多くの PHP を入れないようにしています。
ユーザー名とドキュメント ID があります。
ユーザー名がuser1
で、ドキュメント ID が であるとします24
。
これらは私のテーブルです:
mysql> describe permissions;
+--------+----------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------+----------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| wfId | char(50) | NO | | NULL | |
| docId | char(50) | NO | | NULL | |
| userId | int(11) | NO | MUL | NULL | |
+--------+----------+------+-----+---------+----------------+
4 rows in set (0.00 sec)
mysql> describe users;
+----------+----------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+----------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| login | char(30) | NO | | NULL | |
| password | char(50) | NO | | NULL | |
+----------+----------+------+-----+---------+----------------+
3 rows in set (0.00 sec)
mysql> describe documents;
+---------+-----------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------+-----------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | char(100) | YES | | NULL | |
| wfid | char(50) | YES | | NULL | |
| docid | char(50) | YES | | NULL | |
| created | datetime | YES | | NULL | |
| updated | datetime | YES | | NULL | |
+---------+-----------+------+-----+---------+----------------+
6 rows in set (0.00 sec)
そして、これは私が構築しているクエリです:
mysql> select u.login, d.id, d.wfid, d.docid, p.wfId, p.docId, p.userId
from permissions p, documents d inner join users u
ON (u.login = "user1" AND d.id = 24 AND p.docId=d.docid AND p.wfId=d.wfid);
ERROR 1054 (42S22): Unknown column 'p.docId' in 'on clause'
ただし、p.wfId は以前に宣言されています。どうすればもっとうまくできるか、または私の文のエラーは何ですか?
私の目的は、1 つの結果が返され、アクセスが許可されることです。クエリ結果が空のセットの場合、アクセスは拒否されます。
ありがとう。