我有2个人
客户
id | name |
1 | aa |
2 | bb |
工作订单
id | desc | c_id (customer id) | created_date
1 | abcde | 1 | 2013-11-18 01:00:00
2 | fghij | 1 | 2013-11-19 10:00:00
3 | klmno | 2 | 2013-11-19 11:00:00
我希望记录如下。
customer name | workorder_id | desc | date
bb | 3 | klmno | 2013-11-19 11:00:00
aa | 2 | fghij | 2013-11-19 10:00:00
我想将它添加到cgridview中。如何在yii框架工作中编写CDbCriteria?
=============================================== =================================
更新
我发现查询从工作人员tbl获取最新记录如下。
SELECT t.*
FROM (SELECT c_id, wo_id, MAX(created_date) as MaxTime
FROM workorders
GROUP BY c_id) r
INNER JOIN workorders t ON t.c_id = r.c_id AND t.created_date = r.MaxTime
但我不知道如何加入客户tbl并创建CDbCriteria。请帮助我!!
=============================================== ===========================================
上次查询(正确的查询)
SELECT t1.*, t2.*
FROM workorders t1
inner join customers t2
on t1.c_id = t2.id
inner join (SELECT MAX(workorders.created_date) maxts, c_id
FROM workorders inner join customers
ON workorders.c_id = customers.id
GROUP BY c_id) t3
on t2.id = t3.c_id and t1.created_date = t3.maxts
答案 0 :(得分:0)
如果你有增量主键,只需按主键列使用顺序,减去
ORDER BY `id` DESC
如果您使用的是标准
$criteria->order = 'id DESC';
如果命令构建器
->order->('id DESC');
或
- > order->('date DESC');
我觉得这样的事情可以解决问题:
$result = Yii::app()->db->createCommand()
->select('c.name , w.id , w.desc , w.created_date as date')
->from('workorders w')
->join('customers c ' ,'w.c_id = c.id')
->order('w.date DESC')
->group('w.c_id')
->limit('10')
->queryAll()
答案 1 :(得分:0)
如果不向工作台表添加外键,则首先需要添加外键约束。
<强>查询强>
ALTER TABLE workorders ADD FOREIGN KEY (c_id) REFERENCES customers(id)
然后通过gii代码生成器,为工作器创建模型类,然后创建控制器类。 如果您对gii代码生成器一无所知,那么下面的链接适合您。
http://www.yiiframework.com/screencasts/
观看所有视频,了解yii如何运作。
然后你有三个不同的文件。
我也为客户创建了模型,但我认为不需要客户模型,但如果它给出了错误,那么您也会生成客户模型。 现在,您应该开始使用您的工作程序控制器文件。并将actionIndex函数代码替换为下面给出的代码。
public function actionIndex()
{
$connection = Yii::app()->db;
$sql = "SELECT t1 . * , t2 . * FROM workorders t1
INNER JOIN customers t2 ON t1.c_id = t2.id
INNER JOIN (
SELECT MAX( workorders.date ) maxts, c_id
FROM workorders
INNER JOIN customers ON workorders.c_id = customers.id
GROUP BY c_id
)t3 ON t2.id = t3.c_id
AND t1.date = t3.maxts";
$command = $connection->createCommand($sql)->queryAll();
$this->render('index', array('content' => $command));
}
并在视图索引文件中写下以下代码。
foreach($content as $cont=>$value) {
echo $value['name']." ".$value['id'] ." ". $value['des'] ." ".$value['date'] ."<br>";
}
您可以获得所需的结果。
由于