1
说,我有表上的MySQL名为tbl_order
像这样(只图)结构:如何选择以前的记录不取决于在MySQL中的AutoIncrements ID?
--------------------------------------------------------------------------------------------------------- | id | grade | type | order_date | order_confim_time | vol_in | vol_out | vol_dev | status | | AI | VARCH | VARCH | TIMESTAMP | TIMESTAMP | DOUBLE | DOUBLE | DOUBLE | VARCH | --------------------------------------------------------------------------------------------------------- | 81 | AAA | IN | 2014-09-10 09:00:00 | 2014-09-10 13:00:00 | 498000 | 0 | -2000 | CONFIRM | | 83 | AAA | IN | 2014-09-10 10:01:00 | 2014-09-10 14:00:00 | 998000 | 0 | -2000 | CONFIRM | | 85 | AAA | OUT | 2014-09-11 09:02:00 | 2014-09-11 13:00:00 | 0 | 99000 | -1000 | CONFIRM | | 87 | AAA | OUT | 2014-09-11 10:03:00 | 2014-09-11 14:00:00 | 0 | 145000 | -5000 | CONFIRM | | 89 | AAA | OUT | 2014-09-12 09:04:00 | 2014-09-12 13:00:00 | 0 | 120000 | -5000 | CONFIRM | | 91 | AAA | OUT | 2014-09-12 09:06:00 | NULL | 0 | 130000 | -2000 | NOTCONF | | 93 | AAA | OUT | 2014-09-13 10:05:00 | 2014-09-12 14:00:00 | 0 | 115000 | -5000 | CONFIRM | ---------------------------------------------------------------------------------------------------------
然后我做了以下查询:
SELECT * FROM `tbl_order` WHERE `tbl_order`.`grade` = 'AAA' AND `tbl_order`.`order_confim_time` < NOW() ORDER BY `tbl_order`.`status` DESC, `tbl_order`.`order_confim_time` ASC
所以,在我们可以得到以下结果:
--------------------------------------------------------------------------------------------------------- | id | grade | type | order_date | order_confim_time | vol_in | vol_out | vol_dev | status | | AI | VARCH | VARCH | TIMESTAMP | TIMESTAMP | DOUBLE | DOUBLE | DOUBLE | VARCH | --------------------------------------------------------------------------------------------------------- | 91 | AAA | OUT | 2014-09-12 09:06:00 | NULL | 0 | 130000 | -2000 | NOTCONF | | 93 | AAA | OUT | 2014-09-13 10:05:00 | 2014-09-12 14:00:00 | 0 | 115000 | -5000 | CONFIRM | | 89 | AAA | OUT | 2014-09-12 09:04:00 | 2014-09-12 13:00:00 | 0 | 120000 | -5000 | CONFIRM | | 87 | AAA | OUT | 2014-09-11 10:03:00 | 2014-09-11 14:00:00 | 0 | 145000 | -5000 | CONFIRM | | 85 | AAA | OUT | 2014-09-11 09:02:00 | 2014-09-11 13:00:00 | 0 | 99000 | -1000 | CONFIRM | | 83 | AAA | IN | 2014-09-10 10:01:00 | 2014-09-10 14:00:00 | 998000 | 0 | -2000 | CONFIRM | | 81 | AAA | IN | 2014-09-10 09:00:00 | 2014-09-10 13:00:00 | 498000 | 0 | -2000 | CONFIRM | ---------------------------------------------------------------------------------------------------------
我为了写下面的函数在我的模型Order
用递归以获得上一行:
// i made simplify code, but still the code only work on 1st previous row. the rest still not. public function getPrevRow() { if (is_null($this->order_confim_time)) { $data = self::model()->find(array( 'condition' => '`t`.`grade`=:type_order AND (`t`.`order_date` '`t`.`status` DESC, `t`.`order_confim_time` DESC, `t`.`id` DESC', 'limit' => 1, 'params' => array('type_order' => $this->grade, ':current_date_confirm' => $this->order_confim_time), )); if (is_null($data)) return 0; else return floatval($data->PrevRow) + floatval($data->vol_in) + floatval($data->vol_dev) - floatval($data->vol_out); } else { $data = self::model()->find(array( 'condition' => '`t`.`order_confim_time` '`t`.`status` DESC, `t`.`id` DESC', 'limit' => 1, 'params' => array(':current_date_confirm' => $this->order_confim_time, 'type_order' => $this->grade), )); if (is_null($data)) return 0; else return floatval($data->PrevRow) + floatval($data->vol_in) + floatval($data->vol_dev) - floatval($data->vol_out); } }
结果相当不错,只有尊重order_confirm_time
与NOT NULL
值。
The expected condition is something like this
我怎样才能上一行而不需要依赖于ORDER BY id DESC
?目前我依赖于ORDER BY order_confirm_time
。
我使用Yii 1.1.16分支,PHP 5.4 @ Windows 7的64位,MariaDB的38年5月5日
我不明白你的问题“我怎样才能得到与ID = 93行无需取决于ORDER BY ID DESC”,你可以只发布你想要得到的输出? – 2014-10-05 19:05:02
@ brian-demilia,对不起,如果我的问题不清楚。目标/预期的结果是我可以得到以前的行ID而不依赖于'id'字段。目前我使用'ORDER BY order_confim_time',但只显示不为空(带有值的order_confim_time)数据。 请看看这张照片[当前情况](http://imgbox.com/SKf73tAy)。有2个圆圈,红色和绿色。我想做出这样的[预期条件](http://imgbox.com/ocnyOCha)。 – agungandika 2014-10-05 19:41:07
@Brian德米莉亚,对我的案件的任何想法?我已经简化了我的代码,但仍然只有第一行。其余的仍然指向前一行。 – agungandika 2014-10-05 19:59:22