thinkphp的sql查询写法
2012-10-21 22:55 来源:www.chinab4c.com 作者:ecshop专家
thinkphp的sql查询写法,只要是用thinkphp框架,你就要熟悉thinkphp的sql语句写法,我们在thinkphp里面,他有些写法是不方便的,比如做多个联合查询,以及做表的别名区分字段的时候,往往是比较麻烦的,我想看下这条SQL语句的内容,也不是很方便。以下是通过使用thinkphp的一些小经验,一起和大家分享 。
1:如果查看thinkphp上一条执行的SQL
echo $shop_orders->getLastSql();
2:如何在thinkphp里面写原生态的sql
$model = new Model();
$res = $model->query("SELECT c.cat_id, c.cat_name, c.measure_unit, c.parent_id, c.is_show, c.show_in_nav, c.grade, c.sort_order, COUNT(s.cat_id) AS has_children ".
'FROM ' . $category1 . " AS c ".
"LEFT JOIN " . $category1 . " AS s ON s.parent_id=c.cat_id ".
"GROUP BY c.cat_id ".
'ORDER BY c.parent_id, c.sort_order ASC');
3:如何通过model形式
$goods = M('goods');
$res2 = $goods->field(" cat_id, count(*) as goods_num ")->where(" is_delete = 0 and is_on_sale = 1")->group("cat_id")->select();
4:thinkphp如何使用字段别名。
select a.*,b.* from comment a left join reply b on a.id=b.cid
如下面形式。
$Blog->table(’comment a’)
->join(’reply b on a.id=b.cid’)
->field(’a.*,b.*’)
->order(’id desc’)
->limit(’8′)
->findall();
$Blog->table(’comment a’)
->join(’reply b on a.id=b.cid’)
->field(’a.id,a.name,a.subject,b.category’)
->order(’id desc’)
->limit(’8′)
->findall();
5:thinkphp多个表做联合查询
$Model->table(’table a’)
->join(array(’table1 b on b.id=a.cid’,'table2 c on c.id=b.uid’))
->findall();
或者使用连贯操作中的多个join方法
$Model->table(’table a’)
->join(’table1 b on b.id=a.cid’)
->join(’table2 c on c.id=b.uid’)
->findall();
需要注意的是数组的方法和原来的方式有差别,原来的数组第一个元素是JOIN的类型,现在类型统一放到字符串表达式里面了。如果没有指定JOIN类 型默认仍然是LEFT JOIN 如果需要使用其他的JOIN方式,可以使用下面的方式
$Model->table(’table a’)
->join(’table1 b on b.id=a.cid’)
->join(’right join table2 c on c.id=b.uid’)
->findall();
6:thinkphp数据库修改或者保存某条记录
$goods_ext_data['goods_id'] = $goods_id;
//$goods_ext_data['ext_name'] = addslashes($val[0]);
$goods_ext_data['ext_name'] = $attr_id;
$goods_ext_data['ext_value'] = addslashes($val[1]);
$goods_ext_data['cat_id'] = 65534;
$goods_attr[] = $goods_ext_data;
$GoodsExtFields->add($goods_ext_data);
7:thinkphp查询条件的变种写法
$awhere['cat_id&is_open'] = array($val['cat_id'], '1', '_multi'=>true);
$article_info = $Article->field('article_id,title')->where($awhere)->select();
8:连接查询join left
$ad = M('ad');
$table= C('DB_PREFIX')."ad_position";
$cur_t= C('DB_PREFIX')."ad";
$row = $ad->join("$table ap on $cur_t.position_id = ap.position_id")->where("enabled = 1 AND $cur_t.position_id = '" . $aid .
"' AND start_time <= '" . $time . "' AND end_time >= '" . $time . "' ")->find();
来源:http://www.chinab4c.com
最近更新
常用插件
- ecshop商品库存缺货发货量
ecshop商品库存缺货发货量数据倒出插件上海汽车租赁www.shrentbus.cn...
- ecshop导出会员邮件和手机
ecshop导出会员邮件和手机号插件,主要是用于ecshop系统中促销活动中。获...
- ecshop二次开发商品购买备
ecshop销售统计 插件介绍:ecshop二次开发订单销售统计和商品购买备注服...
- ecshop直接购买流程二次开
ecshop当全场免除运费的时候,其实大可以开发新的直接购买流程,方便...
- ecshop2.7.0utf给属性增加库存
插件介绍:本插件适合ecshop2.7.0的utf8编码对商品的属性进行库存管理...