2012-08-08 116 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