谭咏麟刘欢:SQL语句问题

来源:百度文库 编辑:高校问答 时间:2024/04/30 01:35:11
我在数据库中设置有一个
classid的列
这个列保存分类的信息,因为信息是属于多个分类的,所以存储的信息
是:
139,168,145
这样的形式,每个数字是分类的ID,使用","隔开,
但是查询的时候,有可能只有一个ID值

通过request("classid")
怎么样才能查询,包含request("classid")
这个值的classid列的信息

意思就是
select * from table where "&request("classid")&" in (classid)

当然我知道这个写法估计不对,因为老报错,请问正确的查询应该怎么写呢?

实际工作
"select * from table where (','+classid+',') like '%,'+"+request("classid")+"+',%'"

你说的是用","分隔,我想这样应该做一改动,比如在首尾也加上分割:",139,168,145,"
如果这样可行的话,你试试下面的过滤方法:

select *
from table
where (classid) like "&"%,"&request("classid")&"%",%"

另外,如果没有过滤查询参数的话(例如:"'","--"," or")很容易导致注入式攻击,希望你谨慎一点,在查询前首先检查参数的合法性.

可以用like

select * from table where classid like %'"&request("classid")&"%’

或者
SELECT * from table where instr(classid ,"request("classid")")<>0

这种数据库的设计本身就是不科学的,违反了数据库设计第一范式“不能有多值或复合属性”,将导致查询效率低下。像你这种情况如果要查询同属两个分类的查询就更复杂了。可以考虑在这个表中设定三个或多个分类字段,每个分类字段存放一个分类,这样查询语句写起来方便些,效率更高

可以在程序中控制得到