×

thinkphp子查询

thinkphp子查询(thinkphp select)

admin admin 发表于2023-03-26 20:04:09 浏览68 评论0

抢沙发发表评论

本文目录一览:

ThinkPHP mode 怎么实现模糊查询

复合查询相当于封装了一个新的查询条件,然后并入原来的查询条件之中,所以可以完成比较复杂的查询条件组装。 例如:

$where['name'] = array('like', '%thinkphp%');$where['title'] = array('like','%thinkphp%');$where['_logic'] = 'or';$map['_complex'] = $where;$map['id'] = array('gt',1);

查询条件是

( id 1) AND ( ( name like '%thinkphp%') OR ( title like '%thinkphp%') )

复合查询使用了_complex作为子查询条件来定义,配合之前的查询方式,可以非常灵活的制定更加复杂的查询条件。 很多查询方式可以相互转换,例如上面的查询条件可以改成:

$where['id'] = array('gt',1);$where['_string'] = ' (name like "%thinkphp%") OR ( title like "%thinkphp") ';-thinkphp子查询

最后生成的SQL语句是一致的。

thinkphp利用模型关联来做关联统计

有些时候,并不需要获取关联数据,而只是希望获取关联数据的统计。

例如用户模型与用户充值订单模型,

想知道用户充值了多少次,则用 withCount ,

想知道用户充值了多少钱,则用 withSum ,

想知道充值的最大一笔的金额用 withMax ,

想知道充值的最小一笔的金额用 withMin ,

想知道充值的平均的金额 withAvg

User模型用增加一对多模型关联

控制器中调用,关联统计功能会在模型的对象属性中自动添加一个以“关联方法名+_方法”(支持自定义)为名称的动态属性来保存相关的关联统计数据。

以上方法都是默认用了子查询,如果想

withCount()

生成的sql语句是

如果不用子查询,withCount()第二个参数填false,withSum,withMax,withMin,withAvg第三个参数填false,

生成的sql语句是

thinkphp3.2 子查询

直接上代码

[php] view plain copy

$product_info = M('product_info as info');

[php] view plain copy

$productinfo = $product_info-join('left join c_price_comment as comment on info.sku=comment.sku')-where($where)-order('info.create_time desc')-field('info.*,comment.comment_count')-buildSql(); -thinkphp子查询

$list = M()-table($productinfo.' a')-order(' '.$order.'')-group('sku ')-limit($limit)-select();

buildSql方法后不会进行实际的查询操作,而只是生成该次查询的SQL语句

Thinkphp数据查询group分组如何取每组的最新记录

本人用ThinkPHP3.2,今天正在开发一个需要分组显示的功能,可是从数据库中把相应数据读取后直接用group分组,结果每组显示的是最老的记录,我的需求是要显示每组的最新记录。在网上大搜一翻后,未果,本人决定自行研究,现将方法记录于此以防遗忘。-thinkphp子查询

其实很简单,以供就两步:

第一步:

将符合条件的数据全部取出,暂不用group分组,作为子查询:

[php] view plain copy

$subQuery = $model-field('id,name')-table('tablename')-where($where)-order('time desc')-select(false);-thinkphp子查询

第二部:

利用子查询进行查询分组

[php] view plain copy

$model-table($subQuery.' a')-group('field')-select();span style="font-family: Arial, Helvetica, sans-serif;" /span-thinkphp子查询

好了,思路就是这样。希望对大家有帮助!

thinkphp的数据库查询

SELECT * FROM ((SELECT * FROM user as is_m WHERE is_m.isMember = '1') UNION ALL (SELECT * FROM user as not_is WHERE not_is.isMember = '0' ORDER BY RAND() LIMIT 10 )) as t ORDER BY t.id DESC LIMIT 10, 20"-thinkphp子查询

这是雏形,你可以进行优化。

拆分详解:

(SELECT * FROM user as is_m WHERE is_m.isMember = '1') 这个括号中,是查询会员,这个不用多说,你应该明白,至于为什么要加别名,同表多次查询自然要加别名以区分;-thinkphp子查询

(SELECT * FROM user as not_is WHERE not_is.isMember = '0' ORDER BY RAND() LIMIT 10 )这个括号中,是查询非会员,其中ORDER BY RAND() LIMIT 10是关键,它的意思就是从中随机取十个结果;-thinkphp子查询

SELECT * FROM (会员 UNION ALL非会员) as t ORDER BY t.id DESC LIMIT 10,20。这里即用到了联合查询UNION ALL,也用到了子查询,把联合查询的结果作一个结果集,然后从中进行查询,查询这个结果集的时候,使用ORDER BY和LIMIT进行分页处理。-thinkphp子查询

以上,就是该语句的详解了,当然,其中也需要你做一些处理。

比如要先进行判断会员数满没满三十个,满了则无需如此,直接使用会员,没满则计算出还差多少个,在查询非会员那里LIMIT 数字才好使用;

至于分页,这个又是另一个问题了,你应该知道怎么分页的。

在thinkphp中想用not in和子查询组合一个sql,这个该怎么写?

$model = M("b");

$subQuery = $model-field('id')-where($map)-buildSql(); 

$modle2 = M("a");

$List = $model2-where('id not in '.$subQuery)-select();

这是thinkphp3.0的新特性貌似