thinkphp的select和find的区别
1、都是读取查询数据的功能。
2、find 读取数据表中的一条数据(或者关联数据),主要通过find方法完成,如果查询出错,find方法返回false,如果查询结果为空返回NULL,查询成功则返回一个关联数组(键值是字段名或者别名)。即使满足条件的数据不止一个,find方法也只会返回第一条记录(可以通过order方法排序后查询,查找到一条数据后则不会找下一条数据) 例如:
$User = M("User"); // 实例化User对象
// 查找status值为1name值为think的用户数据
$data = $User->where('name="thinkphp"')->find();
dump($data);
3、select(别名findAll) 读取数据集,其实就是获取数据表中的多行记录(以及关联数据),使用select方法。如果查询出错,select的返回值是false,如果查询结果为空,则返回NULL,否则返回二维数组。例如:
$User = M("User"); // 实例化User对象
// 查找status值为1的用户数据 以创建时间降序(时间戳) 返回10条数据
$list = $User->where('status=1')->order('create_time desc')->limit(10)->select();
select 方法:查询符合条件的所有数据,返回的是一个二维数组。
find方法,如果带参数,就只能是主键ID,这样能返回对应数据,如果不带参数,返回的是所查询数据集的第一条记录
两者还有一个重要的不同之处:读取数据的操作其实和数据集的类似,select可用的所有连贯操作方法也都可以用于find方法,区别在于find方法最多只会返回一条记录,因此limit方法对于find查询操作是无效的。
find方法查询数据的时候可以配合相关的连贯操作方法,如果查询出错,find方法返回false,如果查询结果为空返回NULL,查询成功则返回一个关联数组(键值是字段名或者别名)。即使满足条件的数据不止一个,find方法也只会返回第一条记录
select方法读取数据集其实就是获取数据表中的多行记录(以及关联数据),如果查询出错,select的返回值是false,如果查询结果为空,则返回NULL,否则返回二维数组。
简单的总结下,find和select都是查询数据的方法,区别在于find不管结果有多少条只返回一条记录(等同于对结果加limit 1),select就是返回所有的结果。
例如find()的结果:
$res = M("user")->find();
array (size=1)
'm_id' => string '14' (length=2)
例如select()的结果:
$res = M("user")->select();
array (size=5)
0 =>
array (size=1)
'm_id' => string '14' (length=2)
1 =>
array (size=1)
'm_id' => string '15' (length=2)
2 =>
array (size=1)
'm_id' => string '16' (length=2)
3 =>
array (size=1)
'm_id' => string '17' (length=2)
4 =>
array (size=1)
'm_id' => string '18' (length=2)
因此二者在数组结构上表现出区别,FIND获得的是查询数据的一维的数组,而SELECT是二维数组,这样即便只查询到一条记录,二者的数组结构也是不同的。
select() 方法 可以查询多条结果集,可以用 limit()控制查询条数
find() 方法一次只查询一条结果集,自动带 limit(0,1) 控制查询条数
如果查询结果为一条的话,建议用 find(),比如说查某个会员详情
如果查询为多条的话,就得用select()了,比如查询会员列表