2012-03-05 4 views
1

Как мне сделать order_by в codeigniter?как правильно order_by (время) в codeigniter

SELECT <field> FROM <table> ORDER BY STR_TO_DATE(<field>, '%H:%i') DESC LIMIT 0 , 30 

попытался это, но он принимает «'%H:%i')» в качестве имени поля.

$this->db->order_by("STR_TO_DATE(".$field.", '%H:%i')", $order); 

Поле является VARCHAR и запрос я отправил возвращает результат, что я хочу, но я не знаю, как это сделать в CodeIgniter

+0

После тестирования нескольких вещей, это выглядит, 'запятая вызывает CI обернуть неправильную часть в обратных кавычках:' STR_TO_DATE (last_login, \ ' '% H:% я') \' '. Функции MySQL всегда являются такой болью для использования с активной записью Codeigniter. –

ответ

2

Я не думаю, что вы можете сделать это в CodeIgniter в версии 2.1.0. Как выразился Madmartigan, запятая запускает CI, чтобы обернуть неправильную часть в обратные такты и тем самым дать ошибку mysql. Я думаю, что нет смысла переходить на активную запись в функцию order_by, чтобы найти обходное решение, чем реальное решение для этого. Я проверяю вверх по потоку и, видимо, у них есть что-то, что есть interesting, вам может понадобиться следить, когда это будет выпущено.

Я не тратил больше времени, чтобы найти обходной путь в активной записи order_by, но прибегнуть к этой альтернативе, которая, кажется, работает нормально. Рассмотрим следующее?

$sql = "SELECT <field> FROM <table> ORDER BY STR_TO_DATE(?, '%H:%i') desc LIMIT 0, 30"; 
$this->db->query($sql, array('19:20')); 
+1

Это смешно, я случайно вернулся, чтобы проверить этот вопрос, и вы отправили его не за минуту до этого. Я согласен с вами не бороться с AR CI и просто использовать «нормальный» SQL, хотя было бы легко записать эту функцию в нее. –

+0

Верно, давайте начнем работать, прежде чем улучшать его. Я думаю, что следующий релиз от CI, дополнительный параметр для order_by - это то, что стоит посмотреть на него OP. – Jasonw

Смежные вопросы