select * from Product WHERE (CHARINDEX(';3;', ';' + classid + ';') > 0) 查询出类别为1的下面的所有的子类的产品. 看不懂-_-#!不知道这两个表什么关系...
第一个问题:是的,楼主你的要求已经不能用select.....like...的方式来实现了,我建议你先把表Product数据读出来放到一个DataTable中(dt1),逐条比较 foreach(DataRow dr in dt1.Rows) { string classid_str=dr["classid"].ToString();//读取 string[] classid_array=classid_str.Split(';');//按“;”分拆成数组
where ',' + classid like '%;3;%'忘记了空格,下面也可以select * from Product
WHERE (CHARINDEX(';3;', ';' + classid + ';') > 0)
or classid like '3;%'
WHERE (CHARINDEX(';3;', ';' + classid + ';') > 0)
查询出类别为1的下面的所有的子类的产品.
看不懂-_-#!不知道这两个表什么关系...
foreach(DataRow dr in dt1.Rows)
{
string classid_str=dr["classid"].ToString();//读取
string[] classid_array=classid_str.Split(';');//按“;”分拆成数组
foreach(string temp in classid_array)
{
if(temp=="3")
{
//该DataRow包含“3”,符合要求
}
}
}第二个问题:出类别为1的下面的所有的子类的产品.
这需要用递归的方法
private static DataTable dt1;//定义一静态DataTable用以存放查询结果private void Start()
{
string sqlString="select * from class";//
dt1=......;//把class表全部读出放在dt1中 string firstNode="1";
GetChildrenNode(firstNode);//开始调用递归方法查找1下的子类
}private void GetChildrenNode(string FatherNode)
{
DataRow[] dr_array=dt1.Select("parentid='"+FatherNode+"'");
//获得父节点为FatherNode的行
foreach(DataRow dr in dr_array)
{
GetChildrenNode(dr["classid "].ToString());//获取该行的子类
}
}代码不完整,只希望能给楼主一些思路
or classid like '3;%'
1 ;3;
2 ;3;4;
3 ;5;6;3;
4 ;5;3;6;
5 ;33;34;5;
6 ;30;33;3;保存classid的时候在前后都加“;”查询:
select * from Product
where classid like '%;3;%'
or classid like '3;%'
这个会把33;的也查出来