2013-01-19 40 views
0

可能重複:
MySQL query finding values in a comma separated stringVariable作爲列表不起作用 - 手動名單確實

我有一個奇怪的問題,我希望你們能爲我解答。 如果我使用g.questions(這是一個commaseperated varchar列表),這隻輸出第一個id。 但如果我手動鍵入「1,2,3,4」,而不是g.questions,我得到了我所期望的...

發生了什麼事? :-)

SELECT q.id FROM `questions` q 
LEFT OUTER JOIN `game` g 
ON g.id = 1 
WHERE q.id IN (g.questions) 
+1

你不能那樣做。 'g.questions'是從MySQL的角度來看的單個字符串,不能替代'IN()'。 MySQL認爲它是'WHERE q.id IN('1,2,3,4')' –

+0

@MichaelBerkowski但是爲什麼它會返回第一個id呢?第一個id不等於連接的字符串 –

+0

你如何構建g.questions varchar列表?它是否以某種方式從桌面查詢? –

回答

0

這將完成你正在嘗試做的事:

SELECT q.id FROM `questions` q 
LEFT OUTER JOIN `game` g 
ON g.id = 1 
WHERE concat(',',g.questions,',') like concat('%,',q.id,',%') 

添加一個逗號之前和之後的逗號分隔字符串,確保每個值由逗號勢必然後使用喜歡匹配「,1,2,3,4」與「%,2,%」或任何你的q.id。