设为首页收藏本站
查看: 96|回复: 0

[PHP] ThinkPHP的多表查询详解

[复制链接]

论坛元老

Rank: 6Rank: 6

积分
34274
主题
17031
UID
1347
M币
67
贡献
17176

  • 发表于 2013-8-7 16:48:00 | 显示全部楼层 |阅读模式
    1、Table方法:定义要操作的数据表名称,可以动态改变当前操作的数据表名称,需要写数据表的全名,包含前缀,可以使用别名,例如:
      $Model->Table('think_user user')
      ->where('status>1')
      ->select();
      $Model->table('think_blog blog,think_type type')
    ->where('blog.typeid=type.id')
    ->field('blog.id as id,blog.title,blog.content,type.typename as type')
    ->order('blog.id desc' )
    ->limit(5)
    ->select();
      Table方法的参数支持字符串和数组,数组方式的用法:
      $Model->Table(array('think_user'=>'user','think_group'=>'group'))
      ->where('status>1')
      ->select();
      使用数组方式定义的优势是可以避免因为表名和关键字冲突而出错的情况。
    注:如果不定义table方法,默认会自动获取当前模型对应或者定义的数据表。
    2、Join方法:查询Join支持,Join方法的参数支持字符串和数组,并且join方法是连贯操作中唯一可以多次调用的方法。例如:
      $Model->join('work ON artist.id = work.artist_id')
      ->join('card ON artist.card_id = card.id')
      ->select();
      //Left Join
    $Model->table('user U')
      ->join('news N on U.id=N.cid')
      ->field('U.*,N.*')
      ->order('id desc')
      ->limit('8')
      ->findall();
      默认采用LEFT JOIN 方式,如果需要用其他的JOIN方式,可以改成
      $Model->join('RIGHT JOIN work ON artist.id = work.artist_id')
      ->select();
      //Right Join
    $Model->table('user U')
    ->join(array('right','news N on U.id=N.cid'))
    ->field('U.*,N.*')
    ->order('id desc')
    ->limit('8')
    ->findall();
      如果join方法的参数用数组的话,只能使用一次join方法,并且不能和字符串方式混合使用。
      $Model->join(array(' work ON artist.id = work.artist_id', 'card ON artist.card_id = card.id'))
      ->select()
      运用这种连贯操作方法,可以有效的提高数据查询的代码清晰度和开发效率。
    知识补充:
    查看连贯操作的SQL语句的方法:
      echo $Model->getLastSql(); //打印一下SQL语句,查看一下
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    在我站开通SVIP可同时获得17个站点VIP资源 立即登录 立即注册
    快速回复 返回顶部 返回列表