您的位置:首页 > 编程语言 > PHP开发

ThinkPHP学习笔记(五):数据库操作二

2017-01-21 16:26 417 查看
文章使用的数据库:SQL文件

1)连贯操作之order排序

order(字符串)多个条件的话用英文逗号隔开

$data = M('User')->order("score desc, id asc")->select();
dump($data);

//得到的查询条件是:SELECT * FROM `mk_user` ORDER BY score desc, id asc


2)连贯操作之field方法

field(string) string 传入多个字段名用英文逗号隔开

$data = M('User')->field('id, user_name')->order("score desc, id asc")->select();
dump($data);

//得到的查询条件是:
SELECT `id`,`user_name` FROM `mk_user` ORDER BY score desc, id asc

// 在filed里,进行反字段查找时,两个字段之间不可以加上空格("id, user_name"),一定得去掉空格才能够查找相反的字段
$data = M('User')->field('id,user_name', true)->order("score desc, id asc")->select();
dump($data);

//得到的查询条件是:SELECT `user_name`,`nick_name`,`password`,`create_date`,`update_date`,`score` FROM `mk_user` ORDER BY score desc, id asc


3)连贯操作之limit和page方法

limit(start, length)

$data = M('User')
->field('id,user_name',true)
->order("score desc, id asc")
->limit(1,5)
->select();

//得到的查询条件是:SELECT `nick_name`,`password`,`create_date`,`update_date`,`score` FROM `mk_user` ORDER BY score desc, id asc LIMIT 1,5

//page(页码, 每页的页数(默认20))
$data = M('User')
->field('id,user_name',true)
->order("id asc")
->page(1,5)
->select();

//得到的查询条件是:SELECT `nick_name`,`password`,`create_date`,`update_date`,`score` FROM `mk_user` ORDER BY id asc LIMIT 0,5


4)连贯操作之group和having方法

$data = M('User')->field('score,count(*) as total')->having('score >= 90')->group('score')->select();

//得到的查询条件是:SELECT `score`,count(*) as total FROM `mk_user` GROUP BY score HAVING score >= 90


5)多表查询之table方法

//table(array('表名'=>'别名')) 表名需要加前缀
$data = M()->table(array('mk_user'=>'user', 'mk_userinfo'=>'info'))->where('user.id=info.user_id')->select();

//得到的查询条件是:SELECT * FROM `mk_user` `user`,`mk_userinfo` `info` WHERE ( user.id=info.user_id )


6)多表查询之join方法

join()方法 支持字符串和数组

// 1)默认为左关联
$data = M('user')->join('mk_userinfo On mk_userinfo.user_id=mk_user.id')->select();
//得到的查询条件是:SELECT * FROM `mk_user` LEFT JOIN mk_userinfo On mk_userinfo.user_id=mk_user.id

// 2)右关联
$data = M('user')->join('Right join mk_userinfo On mk_userinfo.user_id=mk_user.id')->select();
//得到的查询条件是:SELECT * FROM `mk_user` Right join mk_userinfo On mk_userinfo.user_id=mk_user.id

// 3)内关联
$data = M('user')->join('inner join mk_userinfo On mk_userinfo.user_id=mk_user.id')->select();
//得到的查询条件是:SELECT * FROM `mk_user` inner join mk_userinfo On mk_userinfo.user_id=mk_user.id

// 4)数组
$data = M('user')
->join(array('mk_userinfo On mk_userinfo.user_id=mk_user.id'))
->select();
//得到的查询条件是:SELECT * FROM `mk_user` LEFT JOIN mk_userinfo On mk_userinfo.user_id=mk_user.id


7)多表查询之union方法

union(‘string array’, true/false) 支持字符串和数组

加上 true 的话,就是作为 UNION ALL 进行查询了,会把重复的数据也给查询出来

$data = M('User')
->field('user_name,id')
->union('select user_name,id from mk_user2')
->select();
//得到的查询条件是:SELECT `user_name`,`id` FROM `mk_user` UNION select user_name,id from mk_user2

$data = M('User')
->field('user_name,id')
->union(array('field'=>'user_name, id', 'table'=>'mk_user2'), true)
// ->union(array('field'=>'user_name, id', 'table'=>'mk_user3'), true)
->select();
//得到的查询条件是:SELECT `user_name`,`id` FROM `mk_user` UNION ALL SELECT `user_name`,`id` FROM `mk_user2`


8)过滤查询之distinct方法

过滤查询只要加上 distinct 即可过滤重复的数据

$data = M('User')->distinct(true)->field('score')->order('score asc')->select();

//得到的查询条件是:SELECT DISTINCT `score` FROM `mk_user` ORDER BY score asc
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  thinkphp