2017-03-06 1 views
0

열 이름이 문자열로 전달되는 곳에 열 값을 연결해야합니다.mysql concat 열이 문자열로 전달되었습니다.

------------------------------------------- 
| id | column_index | c1 | c2 | c3 | .... |c50| 

column_index 필드는 내가하고 싶은 C1, C5, C11 어떤 같은 열 이름의 쉼표로 구분 된 문자열에 있습니다 :이처럼 보이는 잘못 설계된 MySQL의 테이블을 가진 클라이언트가 저장 프로 시저가 없으면 하나의 select 쿼리를 작성하여 어떤 열이 인덱스로 정의되었는지에 따라 연결된 열 값만 반환하십시오. 이 같은

뭔가 : 그것은 MySQL을위한 그와 비슷한 일을하고 쿼리를 만들 수있는 방법

SELECT id, column_index, CONCAT_WS(',' FOR col_name IN column_index) 

인가?

답변

0

데이터 구조에 심각한 문제가 있습니다. 아마도 지나치게 복잡한 쿼리를 작성하는 것보다는이를 수정하는 데 노력을 기울여야 할 것입니다. 말했다

다음 꽤 아니라 작동합니다 :

select id, column_index, 
     concat_ws(',', 
       (case when find_in_set('c1', column_index) > 0 then c1 end), 
       (case when find_in_set('c2', column_index) > 0 then c2 end), 
       (case when find_in_set('c3', column_index) > 0 then c3 end), 
       . . . 
       ) as vals 
. . . 
+0

당신이'아이디' – Uueerdo

+0

@Uueerdo 후'@colnames = column_index을,'누락되었습니다. . . 컬럼 이름으로'column_index'를 해석하지 않았습니다. 흥미로운 데이터 구조. –

+0

이 구조가 심각하게 틀림에 동의합니다. 그러나 이것은 내 클라이언트의 프로덕션 데이터베이스이며 읽기 액세스 권한 만 있으므로 수정할 수 없습니다. 그래서 필자는 통합 된 SQL을 가지고 놀 필요가있다. –