【发布时间】:2013-10-25 10:19:08
【问题描述】:
我通常使用queryRow 来获取一条记录。例如:-
$lastReport = Yii::app()->db->createCommand(
'SELECT * FROM report ORDER BY created DESC'
)->queryRow();
我查看了 MySQL 日志以了解它使用了哪个查询。
SELECT tbl_report.* FROM report ORDER BY created DESC
好像Yii正在从表中检索所有记录并返回第一条记录。
所以我认为我们应该在使用queryRow 时使用LIMIT 1。例如:-
$lastReport = Yii::app()->db->createCommand(
'SELECT * FROM report ORDER BY created DESC LIMIT 1'
)->queryRow();
由于queryRow 正在返回“查询结果的第一行(以数组形式)”,Yii 应该自动添加限制。否则用户将使用此查询来获取单个记录,这将导致性能下降。
我的理解是正确的还是我遗漏了什么?
【问题讨论】:
-
您没有为此使用 ActiveRecord 有什么原因吗?但是从 Yii 的类引用中,您确实应该使用 queryRow() 获得第一行。
-
@davey 使用数组比使用对象更容易。但在这里我给出了一个简化的查询,用于演示目的。
-
由于没有
WHERE,它似乎获取了所有行,所以使用limit 1获取最新报告 -
我明白,我认为 LIMIT 1 可以使用,因为如果你只想要一个,就不需要获取所有行。