我对此感到有点难过。基本上我有两张桌子:
网页:
点数:
我希望从 Page 表中获取记录,并按 Points 表中的点数(点数字段)对其进行排序
目前我有:
$dataProvider=new CActiveDataProvider('Page',array(
'criteria'=>array(
'condition'=>"active = 1 AND userid IN (".$ids.")",
'order'=>"???",
),
'pagination'=>array(
'pageSize'=>30,
),
));
我只是不知道如何通过相关记录的 Points 表值对其进行排序 我已经为 Page / Points 表建立了一个关系,如下所示:
(在页面模型中)
'pagepoints' => array(self::HAS_ONE, 'Points', 'pageid'),
由于
答案 0 :(得分:4)
你需要做两件事:
pagepoints
关系添加到查询条件的with
部分order
部分中引用您要排序的列我在下面的代码中标出了发生这种情况的行:
$dataProvider = new CActiveDataProvider('Page', array(
'criteria'=>array(
'with' => array('pagepoints'), // #1
'condition' => 'active = 1 AND userid IN ('.$ids.')',
'order' => 'pagepoints.points', // #2
),
'pagination'=>array(
'pageSize'=>30,
),
));
要了解其工作原理,您需要了解的是,当Yii构建SQL查询(LEFT OUTER JOIN
到Points
表)时,它会使用您为该关系提供的名称。 Page
模型(您为此定义,它是pagepoints
)来为连接表添加别名。换句话说,查询看起来像:
SELECT ... FROM Page ... LEFT OUTER JOIN `Points` `pagepoints` ...
以下是排序顺序的正确规范是pagepoints.points
:pagepoints
是表别名,points
是该表中的列。
答案 1 :(得分:1)
尝试以下
$dataProvider=new CActiveDataProvider('Page',array(
'criteria'=>array(
'with'=>array('pagepoints'),
'condition'=>"active = 1 AND userid IN (".$ids.")",
'order'=>"t.points DESC",
),
'pagination'=>array(
'pageSize'=>30,
),
));
答案 2 :(得分:0)
这是你想要生成的sql:
从页面内部连接点中选择* 在page.id = points.page_id order by points.points desc