2011-10-18 26 views
0

我的問題是有點難以解釋,最簡單的例子:Mysql的連接字符串值位置,副

在MySQL我有兩個表,一個從一個問卷statments和一個與答案,這樣的事情:

第一表:

tblstm 
StmNo, Statement, LanguageISO3 

Statment是在LanguageISO3配製的問題,即,(1, 「問題1」, 「ENU」),(2 「問題2」, 「ENU」), etc ...

第二個表:

tblanswer 
RespondentId, Answer 

回答是具有0或1的字符串是或否,即。例如「01010110110111」,該位的位置對應於tblstm中的StmNo。

我該如何編寫一個查詢,以便在已知的RespondentId中獲取每個單獨行中的語句(如tblstm表)以及相應的答案。結果應該是這樣的:

1, Question 1, 0 
2, Question 2, 1 
3, Question 3, 0 
etc 
+0

多少答案在那裏,即多少「位」/字符串「答案」多長時間? – Yahia

+4

如果可能的話,請將自己從這個噩夢中拯救出來,並將答案重新構造成規範化的數據結構,並使用適當的語句外鍵。 –

+0

@Yahia它的48個字符長 – Muleskinner

回答

2

正如已經建議在你上面的評論真的應該重新設計,爲標準化結構!

下不建議:

如果你真的想與您現有的數據模型要做到這一點,你可以做到這一點類似於以下(請注意,我沒有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 

上述假設StmNo等同於相應的答案在Answer索引,讓您的前3個問題的答案......這是效率不高也不優雅,有可能是一個更優雅的方式與MySQL(我從來沒有使用MySQL的)來做到這一點...

編輯 - 另一種選擇:

創建一個表tableAnswerNo有一列AnswerNo與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 

這給你所有的答案,48爲RespondentId 22你想要的方式...

+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