Как сделать ID бронирования по PHP с базой данных MySQL?

0

У меня есть такой случай:

JS100829 0001
JS100829 0002

JS=code
10=year
08=month
29=date
0001=the sequence of today first entry
0002=the sequence of today second entry

Мне нужно создать этот код. Кто-нибудь может мне помочь? спасибо.

  • 0
    Где именно вы сталкиваетесь с проблемой? Я могу сказать вам, чтобы echo $code,$year,$month,$date,' ',$sequence; но я думаю, что это не то, что вы хотите услышать
  • 0
    JS всегда одинаков?
Показать ещё 2 комментария
Теги:

5 ответов

1
Лучший ответ

Например, у вас есть база данных для этих записей бронирования, это мое лучшее предположение:

//sequences
$datenow = date("Y-m-d H:i:s");
//i suppose u has load mysql db somewhere before this code
$q = mysql_query("SELECT COUNT(*) FROM yourtablename WHERE bookingdate = '$datenow'");
//how many squences today
$sequencedtoday = mysql_result($q, 0, 0);
//generate code:
$code = 'JS';
$ymd = date('ymd');
$squence = $squencedtoday+1;
$squence = str_pad($squence,4,0,STR_PAD_LEFT);
//return
echo $code.$ymd.' '.$squence;
//return: JS100829 0001
  • 1
    Не используйте mysql_num_rows () для подсчета строк! Это работа MySQL COUNT ().
1

Если вы используете MyISAM или BDB-движок, вы можете создать сложную последовательность auto_increment.
http://dev.mysql.com/doc/refman/5.0/en/example-auto-increment.html говорит:

Для таблиц MyISAM и BDB вы можете указать AUTO_INCREMENT на вторичном столбце в индексе с несколькими столбцами, В этом случае генерируемое значение для столбца AUTO_INCREMENT вычисляется как

 MAX(auto_increment_column) + 1 WHERE prefix=given-prefix.

Это полезно, когда вы хотите поместить данные в упорядоченные группы.

демо:

<?php
$pdo = new PDO('mysql:host=localhost;dbname=test', 'localonly', 'localonly');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$pdo->exec('
  CREATE TEMPORARY TABLE soTest (
    `code` char(2),
    `date` DATE,
    `seq` int auto_increment,
    primary key(`date`, `seq`)
  ) engine=MyISAM
');
insertTestdata($pdo);
showData($pdo);

function insertTestdata($pdo) {
  $stmt = $pdo->prepare('INSERT INTO soTest (`code`,`date`) VALUES (?,?)');
  $rs = array(
    array('JS', '2010-08-29'), array('JS', '2010-08-29'), array('TA', '2010-08-29'),
    array('JS', '2010-08-30'), array('TA', '2010-08-31'), array('TA', '2010-08-31')
  );
  foreach($rs as $r ) {
    $stmt->execute($r);
  }
}

function showData($pdo) {
  $query = "SELECT code,Date_format(`date`, '%y%m%d') as dt, seq FROM soTest";
  foreach( $pdo->query($query, PDO::FETCH_ASSOC) as $row ) {
    printf("%s%s %04d\n", $row['code'],$row['dt'],$row['seq']);
  }
}

печатает

JS100829 0001
JS100829 0002
TA100829 0003
JS100830 0001
TA100831 0001
TA100831 0002

Имейте в виду:

Когда столбец AUTO_INCREMENT определяется как последний столбец индекса с несколькими столбцами, происходит повторное использование значений, удаленных из верхней части последовательности.
0

Сохраняйте значение $sequence в базе данных или в файле конфигурации. Продолжайте увеличивать его каждый раз, когда генерируется идентификатор. Таблица базы данных с столбцами:

  • Дата: дата (также первичный ключ)
  • LatestID: int

Затем сделайте что-то вроде этого:

$sequence = mysql_fetch_array(mysql_query("select LatestID from seqtable where Date = CURDATE()"));
$sequence = $sequence + 1;

$code = "JS";
$mycode = $code . date("ymd") . str_pad($sequence, 4, '0', STR_PAD_LEFT);

mysql_query("insert into seqtable set LatestID = $sequence, Date = CURDATE ON DUPLICATE KEY UPDATE LatestID = $sequence");
  • 0
    Я пытаюсь спасибо
0

Вы ищете что-то вроде этого       

    JS=code
    10=year
    08=month
    29=date
    0001=the sequence of today first entry
    0002=the sequence of today second entry
    */
    $js="JS";
    $date=date('ymd');
    for($i=1;$i<=10;$i++)
    {
      $entry=str_pad($i,4,0,STR_PAD_LEFT);
      echo $js.$date.$entry."<br>";
    }
//output
/*
JS1008290001
JS1008290002
JS1008290003
JS1008290004
JS1008290005
JS1008290006
JS1008290007
JS1008290008
JS1008290009
JS1008290010
*/
  • 0
    да. нравится. Мне нужно вставить в базу данных. Спасибо
0

Не зная, где поддерживается "счетчик последовательности", это мой лучший снимок (многословность):

$code = 'JS';
$date = date('ymd');
$seq  = 1;
$id = sprintf('%s%s %04d', $code, $date, $seq);
  • 0
    Хм, наверное, не то, что вы ищете, ср. комментировать вопрос.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню