의 존재에 따라 부울 쿼리의 사용 결과는 여기 (귀하의 편의를 위해 간체) 내 데이터베이스 스키마의
id
INT의 PKSQL 저장된 쿼리 그냥 ... 어쨌든 지금 SQL 저장 질의에 들어가기 기록
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 ;
오류의 정확한 텍스트 내가 문제는 IF 블록에 대한 인수에 의심 #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
입니다. 결과 집합이 하나 이상 (예 : id
) 인 경우 return true
을 반환합니다.
여러분 중 아무 것도 여기를 보지 않습니까, 아니면 내 데이터베이스 디자인을 다음과 같이 재검토해야합니까?
person
------
id
INT의 PK
level
SMALLINT
회원, 보드 및 임원 모든 권한 수준 인 경우 - 그들은 하나의 테이블에 포함되어야한다가. 자동 생성 된 순차 int 값은 신뢰할 수 없습니다. Priveleges 테이블에 "rank"또는 "weight"라는 열이 있습니다. 그럼 집계 (MIN, MAX 구체적으로)를 사용할 수 있습니다 ... –
흠. 음, 그들은 단지 * 특권 레벨이 아닙니다. 그들은 또한 더 많은 데이터를 가지고 있습니다. 예를 들어'officer'는'position' 필드를 가지고 있습니다. 나는 널과 멤버를 위해서'NULL'을 넣을 수도 있고,'position'을 다른 테이블로 넣을 수도 있습니다. –