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();


温馨提示:答案为网友推荐,仅供参考
第1个回答  2016-06-21
find 方法:查询符合条件的第一条数据,返回的是一个一维数组。
select 方法:查询符合条件的所有数据,返回的是一个二维数组。
find方法,如果带参数,就只能是主键ID,这样能返回对应数据,如果不带参数,返回的是所查询数据集的第一条记录
两者还有一个重要的不同之处:读取数据的操作其实和数据集的类似,select可用的所有连贯操作方法也都可以用于find方法,区别在于find方法最多只会返回一条记录,因此limit方法对于find查询操作是无效的。
第2个回答  2016-08-12

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)

第3个回答  2016-05-26
FIND返回满足查询条件的第一条数据,而SELECT获取所有满足查询条件的数据。
因此二者在数组结构上表现出区别,FIND获得的是查询数据的一维的数组,而SELECT是二维数组,这样即便只查询到一条记录,二者的数组结构也是不同的。
第4个回答  2016-07-22
select() 和 find() 都是查询方法,不同的是:
select() 方法 可以查询多条结果集,可以用 limit()控制查询条数
find() 方法一次只查询一条结果集,自动带 limit(0,1) 控制查询条数
如果查询结果为一条的话,建议用 find(),比如说查某个会员详情
如果查询为多条的话,就得用select()了,比如查询会员列表
相似回答