2013-10-28 5 views
0

select 구문의 결과에 기반하여 MySql에서 조건부 작성 테이블을 수행 할 수 있습니까? 본질적으로, 여러 클라이언트에서 사용하는 스키마가 있지만 그 중 일부 테이블 만 필요하면 다른 값을 기반으로 만들 수 있습니다 ... 예를 들어 ... 사용자가 John이면이 테이블을 만듭니다 ... John 's 앱에 필요합니다. 의 라인을 따라MySQL은 조건부로 테이블을 생성합니다

뭔가 : 비즈니스 로직의

IF EXISTS (SELECT * FROM USERS WHERE name='JOHN') 

CREATE TABLE CREATE_THIS 
    (
     ID VARCHAR(255) COLLATE utf8_bin NOT NULL, 
     NAME VARCHAR(255) COLLATE utf8_bin NOT NULL 
    ) 
    ENGINE=MyISAM DEFAULT CHARSET=utf8; 

답변

1

이런 종류의 정말 응용 프로그램의 데이터베이스 계층 내에 속하지 않습니다. 일반적으로 데이터베이스에 연결하는 데 사용하는 코드 내에서 상위 레벨에 상주합니다.

SET @sql := CASE WHEN EXISTS (SELECT * FROM USERS WHERE name='JOHN') THEN 
'CREATE TABLE CREATE_THIS (
    ID VARCHAR(255) COLLATE utf8_bin NOT NULL, 
    NAME VARCHAR(255) COLLATE utf8_bin NOT NULL 
) ENGINE=MyISAM DEFAULT CHARSET=utf8' 
END; 

PREPARE stmt FROM @sql; 
EXECUTE stmt; 
DEALLOCATE PREPARE stmt; 
+0

아, 제가 다른 질문을 읽은 것 같습니다. – user2864740

+0

선택이 해결되는 경우에 작동합니다. 그러나 @sql이 null 일 때 prepare 문에 오류가 발생합니다. 이것에 대한 점검을 할 수있는 방법이 있습니까? – islandguy

+0

else 문을 사용하여 @sql을 빈 상태로 반환하는 선택으로 설정했습니다. 이것은 약간 hackish 보인다. 나는이 논리를 다른 곳에두기 위해 너희에게 조언을 구할 것이다. 당신의 도움을 주셔서 감사합니다! – islandguy

0

또한 은 CREATE 사용할 수 있습니다

그러나, 완성도를 들어, 실행하는 SQL이 포함 된 문자열에서 문을 준비하여 무엇을 물어 달성하기 위해 (매우 hackish) 방법이있다 테이블 존재하지 않는 경우 (.... ...)

관련 문제