文章使用的数据库: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