2012-08-08 112 views
0

未標準化的數據庫有一個名爲批次的表格WHERE-IN或FIND_IN_SET

表格批次具有帶有多個ID的字段student_id。例如1311, 1319, 1400

來源:SELECT student_ids FROM批次WHERE 1311(student_ids)

我們得到student_ids:1311, 1319, 1400

和:SELECT student_ids FROM批次WHERE 1319(1311,1319,1400)

工作正常:1311, 1319, 1400

執行SELECT tudent_ids FROM批次WHERE 1319 IN(student_ids)

SELECT @student_ids:= student_ids FROM批料B; 選擇student_ids FROM批次WHERE FIND_IN_SET(1319,@student_ids)

回報Null

我缺少什麼?我想我必須將第一個結果轉換爲數組 - 但是如何?

我已經試過Dash的建議(非常感謝DASH),但我仍然有麻煩

我也試過 SELECT ID FROM批次 WHERE INSTR(', '+ 1319+',', ' '+ CAST(student_ids AS CHAR)+',')

上另一篇文章中建議由馬特·艾倫 - 再僅僅在進行第一項匹配

回答

0

試試這個:

SELECT @student_ids := GROUP_CONCAT(CAST(TRIM(student_ids) AS UNSIGNED INTEGER)) 
FROM batches b; 

SELECT student_ids 
FROM batches 
WHERE FIND_IN_SET(1311, @student_ids) ; 

SELECT student_ids FROM batches WHERE CAST(student_ids AS UNSIGNED INTEGER) IN (1319); 
+0

哇,感謝您的即時響應。不幸的是,這隻適用於第一個ID 1311 - 如果你嘗試1319,你會得到空。 – apwatts 2012-08-08 10:24:35

+0

嘗試新的查詢。它應該像'student_ids IN(1319)'嘗試使用修剪。 – Omesh 2012-08-08 10:29:49

+0

尚不完全:字段student_ids是varchar,數據爲'1311,1319,1400',但IN函數無法看到第一個項目。 – apwatts 2012-08-08 10:40:46