我使用CActiveDataprovider来显示来自不同表的数据.现在我遇到了问题.我有两个表(项目和类别),他们都有priority_order列,我需要使用两个列的顺序显示数据.
例如:属于这些类别的有两个类别和六个项目:
现在我需要完全按照上面的顺序显示CGridView中的数据.所有食品都将首先出现,并按优先顺序排序,饮品将在稍后出现; 显然在他们的顺序.
在ItemsController我尝试下面的代码(现在只按类别排序)
$dataProvider = new CActiveDataProvider('Items', array(
'criteria' => array(
'with' => array('category'),
'condition' => 'user_id=' . Yii::app()->user->id,
//'order' => 't.priority_order ASC',
'order' => 'category.priority_order ASC',
),
));
Run Code Online (Sandbox Code Playgroud)
如果仍然不够清楚,我很乐意提供更多细节.任何帮助,将不胜感激.
尝试做与此问题类似的事情,但需要对 MySQL 的 NULLS LAST 进行排序
就像是...
$query->MODEL_NAME::find();
$query->orderBy(['column_1' => 'IS NULL','column_1'=> SORT_DESC]);
Run Code Online (Sandbox Code Playgroud)
虽然这个语法是错误的。谢谢!
当我尝试时orderBy('column_1 IS NULL ASC, column_1 desc')出现错误
SQLSTATE[42S22]:未找到列:1054 未知列。正在执行的 SQL 是:
SELECT * FROM 'table' ORDER BY 'due_date IS NULL'
注意:必须将上面错误中的反引号替换为单引号才能在此处显示。
下面显示的是我需要用这三列进行排序的查询。这是用于复杂的搜索列表。如果我使用其中之一,它就会完美地工作。但处理不止一个时,它无法正确排序。
编辑
其实我需要的是,优质唱片一定要排在第一位,而且喜欢的唱片也比较多,而且精英客户有更多的优先权。这些都是有条件的
1)首先会出现更多最爱
2) 但会考虑保费
3) 如果 basic 有 5 个收藏夹,则不会推到顶部,basic 的优先级较小
4)精英也有一些好的优先权
SELECT
`Driver`.`id` ,
`Driver`.`login_id` ,
`Login`.`profile_type`,
.................
ORDER BY `fav_count`,
FIELD( `Login`.`profile_type` , "premium", "basic" ) ,
`Driver`.`is_elite` ASC
Run Code Online (Sandbox Code Playgroud)
我预期的示例结果
is_elite| profile_type | fav_count
________|_____________________|____________
1 | premium | 4
1 | premium | 3
1 | premium | 2
1 | premium | 1
0 | basic | 5
0 | basic | 0
Run Code Online (Sandbox Code Playgroud)
请建议我 。谢谢