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