Просто попадаю в хранимые запросы SQL прямо сейчас ... в любом случае, вот моя схема базы данных (упрощенная для ВАШЕГО удобства):
member
------
id
INT PK
board
------
id
INT PK
officer
------
id
INT PK
Если вы в ООП, сотрудник наследует член совета. Другими словами, если кто-то числится в таблице officer
, он / она заносится в таблицу board
и таблицу member
. Я хочу узнать, какой кто-то имеет самый высокий уровень привилегий. Пока мой SP выглядит так:
DELIMITER //
CREATE PROCEDURE GetAuthLevel(IN targetID MEDIUMINT)
BEGIN
IF
SELECT `id`
FROM `member`
WHERE `id` = targetID;
THEN
IF
SELECT `id`
FROM `board`
WHERE `id` = targetID;
THEN
IF
SELECT `id`
FROM `officer`
WHERE `id` = targetID;
THEN
RETURN 3; /*officer*/
ELSE
RETURN 2; /*board member*/
ELSE
RETURN 1; /*general member*/
ELSE
RETURN 0; /*not a member*/
END //
DELIMITER ;
Точный текст ошибки
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near
'SELECT id
FROM member
WHERE id = targetID;
THEN
IF
SEL' at line 4
Я подозреваю, что проблема в аргументах для блоков IF. То, что я хочу сделать, это вернуть true
, если набор результатов хотя бы один - то есть id
был найден в таблице.
Кто-нибудь из вас, ребята, видит здесь что-нибудь, что нужно сделать, или я должен пересмотреть дизайн моей базы данных следующим образом:?
person
------
id
INT PK
level
SMALLINT