findAll 中 in 怎么用

#1 skyzong

一般的sql语句中in 用法是 id in(45,26,30)
$id = $this->spArgs("id");  //输过来一个分类的id
如何查出 在表 的 classid 这个字段中符合的记录????
注 : classid 这个字段中的存储数据格式为  
45,56,54
1,5,7
56,52
48,56
.......

findAll() 这里怎么写???


2013-06-08 16:51:18

#2 linzg3

spClass('tablename')->findAll(' find_in_set($id,classid)');
这样就可以了。

find_in_set函数的语法:find_in_set(str,strlist)
假如字符串str 在由N个子链组成的字符串列表strlist 中,则返回值的范围在 1 到 N 之间。一个字符串列表就是一个由一些被‘,’符号分开的自链组成的字符串。如果第一个参数是一个常数字符串,而第二个是type SET列,则   FIND_IN_SET() 函数被优化,使用比特计算。如果str不在strlist 或strlist 为空字符串,则返回值为 0 。如任意一个参数为NULL,则返回值为 NULL。这个函数在第一个参数包含一个逗号(‘,’)时将无法正常运行。

2013-06-09 11:43:12

#3 zhgzzy

function index(){ // 这里是首页
                $post= spClass("lib_article");
                $bid = $this->spArgs("bid");
                if($bid){
                   $this->results = $post->spLinker()->spPager($this->spArgs('p', 1), 2)->findAll(' find_in_set($bid,classid)','intime DESC','id,title,concept,cityname,classname,classid,gznum,ytnum,logo');   
                }
                $this->results = $post->spLinker()->spPager($this->spArgs('p', 1), 2)->findAll(null,'intime DESC','id,title,concept,cityname,classname,classid,gznum,ytnum,logo');   
                $this->pager = $post->spPager()->getPager();
}
SELECT COUNT(id) AS SP_COUNTER FROM agz_article WHERE find_in_set($bid,classid)
执行错误: Unknown column '$bid' in 'where clause'

2013-06-09 12:55:26

#4 wyvern2013

mysql的函数不是php函数 不能这么用吧

2013-06-09 17:22:50

#5 jake

zhgzzy 发表于 2013-6-9 12:55
SELECT COUNT(id) AS SP_COUNTER FROM agz_article WHERE find_in_set($bid,classid)
执行错误: Unknown co ...
注意,单引号内的$bid是原封不动输出的,你应该用双引号。

findAll可以用字符串条件,这个看手册就知道了

2013-06-09 23:09:41

#6 拓文

直接findALL("  id IN(45,26,30) ") 就可以了

2013-07-01 05:26:31