Codeigniter MySQL выберите max, используя значение типа varchar - PullRequest
0 голосов
/ 25 января 2020

Я хочу выбрать max auto_no из следующего столбца типа varchar в моей модели codeigniter

+------------+
|  auto_no   |
+------------+
| 2020-00821 |
| 2020-00822 |
| 2020-00823 |
| 2020-00824 |
| 2020-00825 |
+------------+ 

В этом примере это значение равно 825. Я попробовал следующую опцию

public function generate_auto_no($count = 1, $start = 00000, $digits = 5)
    {
        $query = $this->db->get('letter_letter');
        $this->db->select("MAX(CAST(SUBSTRING_INDEX(auto_no, '-', -1) AS UNSIGNED)) AS auto_no", FALSE);        
        $count = ($query->num_rows() > 0) ? $query->row()->auto_no + 1 : 0;
        $result = array();
        for ($n = $start; $n <= $start + $count; $n++) {
            $result[] = str_pad($n, $digits, "0", STR_PAD_LEFT);
        }
        return date("Y").'-' . end($result);
    }

Но не получил ожидаемое значение. Кто-нибудь может помочь?

Ответы [ 3 ]

1 голос
/ 25 января 2020

Я думаю, вы можете просто выбрать максимальную строку:

$this->db->select_max("auto_no");
$query = $this->db->get('letter_letter');
if ($query->num_rows() > 0) {
    $last_auto_no = $query->row()->auto_no;
    $no = intval(explode('-', $last_auto_no)[1]) + 1;
    $auto_no = date("Y").'-' . str_pad($no, $digits, "0", STR_PAD_LEFT);
} else {
    $auto_no = (date("Y").'-' . str_pad(0, $digits, "0", STR_PAD_LEFT));
}
return $auto_no
0 голосов
/ 25 января 2020

Максимальное значение можно получить, используя MAX() для значений varchar и затем извлекая количество последних 5 символов:

select right(max(in_num), 5) + 0
from tablename

См. demo . Результат:

825
0 голосов
/ 25 января 2020

Один вариант будет использовать пользовательский запрос:

$this->db->query(" SELECT MAX( CAST( SUBSTR(auto_no,INSTR(auto_no,'-')+1,LENGTH(auto_no)) AS SIGNED) ) FROM tab ");

, включая хорошо известные строковые операторы MySQL DB.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...