日期:2014-05-16 浏览次数:20976 次
mysql> select * from text; +----+-------+------------+ | id | value | articles | +----+-------+------------+ | 1 | aaa | 1-2,4-9,37 | | 2 | bbb | 23,80 | | 3 | ccc | 1-24 | +----+-------+------------+ 3 rows in set (0.00 sec) mysql> select * from text t where id in (select substring(articles,1,instr(arti cles,",")-1) from t); +----+-------+------------+ | id | value | articles | +----+-------+------------+ | 1 | aaa | 1-2,4-9,37 | +----+-------+------------+ 1 row in set (0.00 sec)
------解决方案--------------------
http://topic.csdn.net/u/20090727/09/fa250237-de1c-4266-be9a-99e9ac454d44.html
看看这个帖子#24的。我觉得你这个问题貌似跟哪个问题有个类似!
------解决方案--------------------
SELECT `values` FROM (
SELECT newb,a1.values,
IF(INSTR(newb,'-')>0,LEFT(newb,INSTR(newb,'-')-1),newb) AS mi,
IF(INSTR(newb,'-')>0,MID(newb,INSTR(newb,'-')+1,LENGTH(newb)),newb) AS ma
FROM (
SELECT a.*,
MID(MID(newa,b.id,LENGTH(newa)),2,LOCATE(',',MID(newa,b.id,LENGTH(newa)),2)-2) AS newb
FROM (
SELECT *,CONCAT(',',articles,',') AS newa FROM `test`.tn) a,lsb2 b
WHERE LENGTH(newa)>=b.id
AND MID(newa,b.id,1)=','
AND LENGTH(MID(newa,b.id,LENGTH(newa)))>=2
ORDER BY a.values,b.id) a1 ) a2
WHERE 5 BETWEEN mi AND ma
其中LSB2只有ID字段,内容1-1000数字,`test`.tn为工作表
------解决方案--------------------
怎么不能缩进?,再来一遍
for(i=id第一个,i<=id最后一个,id++) {//不遍历是不行的 字符串 strArt=该行articles 。 //when i=1,strArt=1-2,4-9,37 //第1种可能:目标编号==37 将目标编号转换为字符串,在strArt中查找 ,如果有就是找到了,将该id加入结果。 //第2种可能:目标编号==7 for(从strArt第一个字符到最后一个循环,设当前的字符为c) { if(c==‘-’) { 以(字符串前边界,字符串后边界,逗号)为边界, 取c前后的字符,将这个字符串转换为int型得到iBef,iAft。 if(目标编号>iBef and 目标编号<iAft) { 找到了!将该id加入结果 } } } }