2012-07-28 6 views
4

mysql select 문에서 동적 열 이름이 필요한 오늘은 MySQL에 빠져 있습니다. 설명해 드리죠 :MySql의 동적 열 이름 선택

sql> select name1 from namescollection. 
sql> select name2 from namescollection. 
sql> select name3 from namescollection. 

그래서 namescollection 테이블이 세 개의 열 이름 1가, NAME2, NAME3 내가 1,2,3와 같은 동적 인 내 저장 프로 시저에서이 테이블을 쿼리 싶습니다 변수로 전달 될 필요 ,하지만 난 쿼리 너무 간단한 SQL에 : 내가 부르고 때

SELECT concat('name','1') FROM `namescollection` 

name1 ----- name1 rather fetching name1 field's value.

어떤이에 제안 할 수 오른쪽 기능은 내가 출력 NAME1에 권리를 알고 있지만 CONCAT 오히려 사용해야 concat하지만 난 내가 사용하고 싶다. t를 열 이름으로 사용하십시오. 밖으로

DELIMITER // 
CREATE PROCEDURE selname (IN col VARCHAR(20)) 
BEGIN 
    SET @sql = CONCAT('SELECT ', col, ' FROM tbl'); 
    PREPARE stmt FROM @sql; 
    EXECUTE stmt; 
    DEALLOCATE PREPARE stmt; 
END// 
DELIMITER ; 

테스트를 가진 : 간단한 예를 들어

: 당신이 할 수있는 일

+0

나는 이해할 수 없다. 'SELECT name1','SELECT name2','SELECT name3'을 사용하는 것이 잘못된 것인가요? –

+0

PHP string cat을 사용하지 않는 이유는 무엇입니까? – codetiger

+0

저장 프로 시저 @codetiger 및 phMyCoder에서 사용해야합니다. procedurename (1) // 2,3,4 등의 호출로 실행하고 싶습니다. 다음 날, 몇 개월 또는 몇 년 동안 5 또는 8로 변경 될 수 있습니다. – Luckyy

답변

8

는 문자열 쿼리를 실행 할 수있는 저장 프로 시저 내에서 준비된 문을 사용하다 이 SQLFiddle Demo

+0

Zane 고맙습니다. 솔루션으로 이것을 발견하고 잘 테스트하고 잘 작동했습니다. 나는 SQL이 어떤 기능을 가지고 있어야한다고 생각했다. 감사합니다 :) – Luckyy

+0

SQLFiddle? 너도 알다시피 ... –

-1

저장 프로 시저의 동적 열 이름 업데이트 성명 :

DELIMITER // 
CREATE DEFINER=`root`@`localhost` PROCEDURE `selname`() 
BEGIN 
    declare cl int ; 
    declare clvalue int ; 

    set cl=1; 
    SET clvalue=1; 
    while cl < 4 DO 
     SET clvalue=clvalue*cl; 
     SET @sql = CONCAT('update test set col',cl, '=',clvalue,' where id=1'); 
     PREPARE stmt FROM @sql; 
     EXECUTE stmt; 
     DEALLOCATE PREPARE stmt; 
     set cl=cl+1; 
    end while; 

END // 
DELIMITER ;