jeudi 23 juin 2016

How to write an SQL query to get information out of multiple tables?

I need to write a query that will satisfy the following conditions:

Given a list of uids (6,8,10), get name_first and name_last of the users that have the permission 'Administer users'.

CREATE TABLE users (
uid INT(11) AUTO_INCREMENT,
status TINYINT(3) NOT NULL DEFAULT 1,
name_first VARCHAR(256) DEFAULT '',
name_last VARCHAR(256) DEFAULT '',
email VARCHAR(256) DEFAULT '',
PRIMARY KEY (`uid`)
);

CREATE TABLE role(
rid INT(11) AUTO_INCREMENT,
name VARCHAR(256),
PRIMARY KEY `rid` (`rid`)
);

CREATE TABLE users_roles (
uid INT(11),
rid INT(11),
PRIMARY KEY (`uid`),
KEY `rid` (`rid`)
);

CREATE TABLE permissions (
rid INT(11),
permission VARCHAR(64),
UNIQUE KEY (`rid`, `permission`)
);

INSERT INTO users (uid, status, name_first, name_last, email) 
VALUES 
(1, 1, 'Joe', 'Montana', ''),
(2, 1, 'Eli', 'Manning', ''), 
(3, 1, 'Peyton', 'Manning', ''), 
(4, 1, 'Steve', 'Young', ''), 
(5, 1, 'John', 'Elway', ''), 
(6, 1, 'Robert', 'Griffin', ''), 
(7, 1, 'Joe', 'Montana', ''),
(8, 1, 'Tom', 'Brady', ''),
(9, 1, 'Drew', 'Brees', ''),
(10, 1, 'Andrew', 'Luck', '');

INSERT INTO role (rid, name) 
VALUES
(1, 'Teacher'),
(2, 'Athletic Directory'),
(3, 'Administrator');

INSERT INTO permissions (rid, permission) VALUES
(1, 'Administer users'),
(1, 'Administer courses'),
(1, 'Build Unicorns'),
(2, 'Administer groups'),
(3, 'Administer users'),
(3, 'Administer school');

INSERT INTO users_roles (uid, rid) VALUES
(1, 3),
(2, 1),
(3, 3),
(4, 1),
(5, 1),
(6, 2),
(7, 2),
(8, 3),
(10, 1);

This is what I have so far:

SELECT name_first, name_last FROM users
JOIN users_roles
ON users.uid = users_roles.uid
JOIN role
ON role.rid = users_roles.rid
JOIN permissions
ON users.uid = permissions.rid
WHERE users.uid = 8 AND permissions.permission = 'Administer users';

This is my first attempt at writing SQL and I've confused myself trying to make it work. Any help is appreciated.

Aucun commentaire:

Enregistrer un commentaire