如何加入2 tbls获得最新记录?

时间:2013-11-19 05:39:46

标签: yii

我有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

2 个答案:

答案 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如何运作。

然后你有三个不同的文件。

  • models / workorders.php
  • 控制器/ WorkordersController.php
  • 查看/工作订单/ index.php的

我也为客户创建了模型,但我认为不需要客户模型,但如果它给出了错误,那么您也会生成客户模型。 现在,您应该开始使用您的工作程序控制器文件。并将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>";
}

您可以获得所需的结果。

由于