XOOPS中的Criteria类及其相关类的用法[转自东至]

在XOOPS中,当取得某些满足特定条件的数据的时候就需要使用一些过滤条件。比如取得前30行已经发布的文章。

Criteria类及其相关类就是起这个作用的,通过使用它们,你可以方便地构造各种条件。

在英文中,Criteria是criterion的复数,criterion的意思是“标准,准则,尺度 ”。还有一个词“Compo”,是合成物的意思,稍后用到。

Criteria的用法

首先初始化一个CriteriaCompo,用来装载这些查询条件:

$criteria = new CriteriaCompo();

增加查询条件:

//id等于5
$criteria->add(new Criteria(id, 5));
//id大于10
$criteria->add(new Criteria(id, 10, >));

 

很方便吧,每一个Criteria实例就是一个查询条件,下面我们分析一下参数。

Criteria($column, $value = , $operator = =, $prefix = , $function = )

$column:要操作的字段名称。

$value:字段满足的值。

$operator:操作符,比如 = , > , < , <= , >= , IN , NOT IN等。

$prefix:表前缀,稍后在例子中可以看到效果。

$function:要对字段进行的MySQL函数操作,比如md5()。

知道了参数,那么下面我们再看一个例子(xoops_是全局的表前缀):

$criteria->add(new Criteria(hash, 10, =, xoops_info_info, md5(%s)));

产生的SQL语句是:

SELECT * FROM `info_info` WHERE (md5(info_info.hash) = 10)

我们先忽略info_info表示什么东西,也忽略这个SQL语句的不合逻辑性。单单从参数上看应该就可以理解这几个参数的意义了。

其他的条件:

$criteria->setStart(0); //满足条件的第0条记录开始
$criteria->setLimit(10); //提取10条记录
$criteria->setGroupby(category); //按照category字段分组
$criteria->setSort(weight); //按照weight字段排序
$criteria->setOrder(ASC); //排序是由小到大的顺序
 

 

如果你明白基本的MySQL,那么你应该很容易明白以上的语句是什么意思。

综合例子

说了这么多,我们将以上的代码合起来看看效果吧。提醒,请不要理会生成的SQL的逻辑错误,只要关心这些函数把他们的参数放到了SQL语句的什么地方。

PHP代码

$infoHandler = xoops_getmodulehandler(info);
$criteria = new CriteriaCompo();
 
$criteria->add(new Criteria(id, 5, >));
$criteria->add(new Criteria(id, 10, <, xoops_info_info, md5(%s)));
 
$criteria->setStart(0);
$criteria->setLimit(10);
$criteria->setGroupby(category);
$criteria->setSort(weight);
$criteria->setOrder(ASC);
 
$infos = $infoHandler->getAll($criteria);

 

生成的SQL语句:

SELECT * FROM `info_info` WHERE (id > 5 AND
 md5(info_info.id) < 10) ORDER BY weight ASC LIMIT 0, 10

在这里,groupby条件没有能显现出来。这个问题如果你精通SQL,就会理解。以后我们再探讨这个SQL。还有上面的代码的第一行和尾行我们会在下一篇中继续分析。modulehandler是十分强大的!

怎么没有贴源代码

以前,我分析xoops的时候,总是贴上一大段的xoops源代码。而这次,我主要从使用方面上来分析,并没有粘贴源代码。主要原因是:

  • 这样可能更清晰
  • 这样节省篇幅
  • 我本人也不知道那种形式更好,如果你看到了这一行文字,请在看完之后花费30秒的时候给我写点评论。写出你认为写法中的不足,或者你喜欢文章中的那一部分,以便我以后改进!因为以后会有更多的XOOPS分析,你也不希望我写出一堆你不懂的东西吧。

需要进一步了解Criteria的XOOPSer应该去看看源代码。这个文件在:class/criteria.php。你会发现很多有用的代码!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值