2011-10-18 3 views
0

내 문제는, 설명하기가 조금 어렵 예에 의하여 쉬운한다 : mysql에서MySQL은 문자열 값 위치 부사장에 가입

내가 두 테이블하는 questionaire에서 문에서도 한 답변 하나, 이런 식으로 뭔가를 가지고 :

첫 번째 테이블 :

tblstm 
StmNo, Statement, LanguageISO3 

한 Statment는 LanguageISO3에서 공식화 질문, 즉 (1, "질문 1", "ENU"), (2, "질문 2", "ENU"), 등 ...

(210)

두 번째 표 :

tblanswer 
RespondentId, Answer 

답변 예, 예, 아니오 0 또는 1 문자열입니다. "01010110110111"예를 들어 비트의 위치는 tblstm의 StmNo에 해당합니다.

어떻게하면 각 문장이 알려진 답변을위한 별도의 답변 (tblstm 테이블과 같은)으로 나뉘어져 있는지 알 수 있습니다. 그 결과는 다음과 같이해야한다 :

1, Question 1, 0 
2, Question 2, 1 
3, Question 3, 0 
etc 
이미 정말 정규화 된 구조로 그를 재 설계해야 당신이 위의 의견에 조언
+0

얼마나 많은 답은 즉 얼마나 많은 "bits"/ 얼마나 오래 문자열'Answer'입니까? – Yahia

+4

가능하다면이 악몽에서 벗어나 진술에 적절한 외래 키가있는 정규화 된 데이터 구조로 응답을 재구성하십시오. –

+0

@Yahia 그 48 자 길이 – Muleskinner

답변

2

!

다음은 권장되지 않습니다 : 당신이 정말로 당신의 현재 데이터 모델이 작업을 수행 할 경우

당신이 그것을 비슷한 할 수있는 다음 (I 더 MySQL의 전문가 그래서 아마도이없는 오전에 유의하시기 바랍니다 더 좋은 방법) :! 위

SELECT s.StmNo, s.Statement, SUBSTR (a.Answer, s.StmNo, 1) 
FROM tblstm s CROSS JOIN tblanswer a WHERE a.RespondentId = 22 AND s.StmNo = 1 
UNION 
SELECT s.StmNo, s.Statement, SUBSTR (a.Answer, s.StmNo, 1) 
FROM tblstm s CROSS JOIN tblanswer a WHERE a.RespondentId = 22 AND s.StmNo = 2 
UNION 
SELECT s.StmNo, s.Statement, SUBSTR (a.Answer, s.StmNo, 1) 
FROM tblstm s CROSS JOIN tblanswer a WHERE a.RespondentId = 22 AND s.StmNo = 3 

은 그것이 ... StmNoAnswer의 각 응답의 인덱스와 동일한 것으로 가정하고 당신에게 처음 3 개 질문에 대한 답변을 제공합니다

은 하나의 열 AnswerNo에있는 테이블 tableAnswerNo 만들기 : 다른 옵션 -

편집 ... NOT 효율도 우아한와 MySQL (I MySQL을 사용한 적이)와 함께이 일을 더 우아한 방법이 될 수있다 48 행 ... 행에는 [1; 48]의 각 고유 번호가 있습니다.

그럼 당신이 할 수 있습니다 :

SELECT s.StmNo, s.Statement, x.Answer FROM 
tblstm s CROSS JOIN 
(SELECT a.RespondentId, an.AnswerNo, SUBSTR (a.Answer, an.AnswerNo, 1) Answer FROM 
tblanswer a CROSS JOIN tableAnswerNo an WHERE a.RespondentId = 22) x ON x.AnswerNo = s.StmNo 
ORDER BY s.StmNo 

이 당신에게 RespondentId (22) 당신이 원하는 방식에 대한 모든 48 답을 제공합니다 ...

+0

감사합니다 - 이것을 시도 할 것입니다 – Muleskinner

+0

@ ThomasC.Thomsen 내 편집을 참조하십시오 ... 그리고 upvote/마크를 잊지 마세요 도움이되었다 어떤 대답을 수락 ... – Yahia

1

뭔가 같이 :

SELECT 
    s.StmNo 
    , s.Statement 
    , SUBSTRING(a.Answer, s.StmNo, 1) 
FROM 
    tblstm s 
    JOIN 
    tblanswer a 
     ON a.QType = s.QType 
WHERE 
    a.RespondentId = @KnownRespondentId 
ORDER BY 
    s.StmNo 
+0

아주 좋은! 그것을 해결하는 것 같습니다 – Muleskinner