2015-03-23 4 views
0

Я хочу, чтобы хранить записи в моей базе данных с этими значениями, как их REFERENCE_IDПриращение переменной с некоторыми буквами в нем

CD000001 
CD000002 
CD000003 
CD000004 
etc 

, прежде чем я сохранить запись, я хочу проверить REFERENCE_ID последней записи в то добавьте для следующий запись. Например, следующая запись должна быть CD000005

Я могу принести последнюю запись, то сделать substr($var, 2);, чтобы избавиться от CD части так, что я могу делать расчеты. Однако я получаю CD5. Я не хочу вручную вводить эти 00000, потому что, когда я достиг рекорд 10, будет кризис. Я получу CD0000010 вместо CD000010.

Пожалуйста, помогите.

+3

Вы пытались увидеть, что произойдет, если вы выполните '$ myVar = 'CD000001; $ MYVAR ++; echo $ myVar; '? –

+1

Но полагаться на PHP, увеличивая значение, чтобы избежать дублирования в записях базы данных, не очень хорошо или эффективно –

+0

Я согласен с @MarkBaker. Здесь вы предпочитаете использовать возможности автоматического наращивания MySQL вместо использования PHP. –

ответ

3

Использовать функцию str_pad для PHP. В качестве примера:

$next_record = 'CD'. str_pad($last_auto_increment_id, 6, "0", STR_PAD_LEFT); 
1

Рассмотрим следующий

mysql> create table test (val varchar(100)); 
Query OK, 0 rows affected (0.11 sec) 
mysql> insert into test values ('CD000001'),('CD000002'),('CD000003'),('CD000004'); 
Query OK, 4 rows affected (0.03 sec) 
Records: 4 Duplicates: 0 Warnings: 0 

mysql> select * from test ; 
+----------+ 
| val  | 
+----------+ 
| CD000001 | 
| CD000002 | 
| CD000003 | 
| CD000004 | 
+----------+ 
4 rows in set (0.00 sec) 

Теперь, чтобы получить последнюю запись, вы можете использовать следующую технику

select * from test 
order by cast(substring_index(val,'CD',-1) as unsigned) desc limit 1 ; 

+----------+ 
| val  | 
+----------+ 
| CD000004 | 
+----------+ 

1 row in set (0.00 sec) 

Теперь при выборе вы можете получить значение - ' CD 'как

mysql> select substring_index(val,'CD',-1) as val 
from test order by cast(substring_index(val,'CD',-1) as unsigned) desc limit 1 ; 
+--------+ 
| val | 
+--------+ 
| 000004 | 
+--------+ 
1 row in set (0.00 sec) 
0

Вы должны использовать Mysql LPAD() функцию:

SELECT LPAD('8' , 6, '0'); 
    --> returns "000008" 
0

допускаю, если вы получили CD000004 в одной переменной. скажем $ var

Таким образом, $ var = 'CD000004'; $ with_cd_var = substr ($ var, 2) + 1;

$ final_val = 'CD'.str_pad ($ with_cd_var, 6,' 0 ', STR_PAD_LEFT);

в $ final_val содержат строку как "CD000005"

0

Get REFERENCE_ID с помощью функции str_pad PHP:

$ REFERENCE_ID = 'CD'. str_pad (($ reference_id + 1), 6, "0", STR_PAD_LEFT);

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