Я работаю над системой продажи билетов на PHP и MySQL.
У меня есть стол support
с id
как мой первичный ключ и AI.
я хочу добавить ticket_number
, так что при подаче заявки каждому билету присваивается уникальный номер. Я не могу использовать MySQL для AI второго поля, верно?
Если я даю первый билет номер, а затем написать запрос для поиска последнего ticket_number
в БД, тогда я думал сделать что-то вроде:
$ticket = 1;
$next = $ticket+1;
echo "ticket number: #".$next;
будет ли это работать или есть лучший способ?
По рекомендации MonkeyZeus, Вы должны сделать шаг назад и пересмотреть свою схему.
Вы хотите иметь несколько строк (ответов), которые связаны между собой одним идентификатором (номером заявки).
Вы определенно хотите, чтобы этот идентификатор был идентификатором строки в другой таблице.
Таким образом, у вас должно быть две таблицы:
tickets
replies
Первый сможет хранить данные, относящиеся к заявке, включая состояние заявки (открыто, закрыто …), кому он назначен (идентификатор пользователя), кто создал заявку (опять же, идентификатор), и, возможно, когда он был открыт и закрыт (хотя это можно сделать с помощью других средств).
Второй будет содержать данные, относящиеся к каждой записи в вашем билете (исходное сообщение и последующие ответы, идущие туда-сюда).
Вы также можете иметь другие таблицы (или это может быть так же, как replies
) для других типов действий (изменение статуса заявки, создание дополнительной заявки и т. д.).
tickets
будет иметь уникальный идентификатор, который вы можете использовать как номер билета (возможно, с каким-то префиксом, возможно, каким-то образом переформатированным).
replies
будет иметь уникальный идентификатор (который будет полезен, когда вы хотите прикрепить файлы к ответу или отредактировать его), а также идентификатор заявки, с которой он связан.
Пусть Mysql создает идентификаторы. Используйте API вашего любимого языка, чтобы получить идентификатор последней вставленной строки.
Для хорошего и уникального идентификатора у вас есть намного лучшие решения:
unique = true
функциональность и запрос, чтобы получить максимум этого столбца и приращение в вашем коде перед новой вставкойЯ решил адаптировать ответ @Himanshu kumar следующим образом (так как это решает мой обычный вопрос), чтобы использовать идентификатор пользователя и метку времени (которые я уже использую) в качестве номера заявки:
$user_id = 7; //example from session variable
$cur_date = date('dmyHis'); //timestamp ticket submitted
$ticket = '#'.$user_id.'-'. $cur_date;
Это создаст уникальную переменную, которая имеет идентификатор пользователя, дату и время. Я использовал секунды, чтобы сделать его более уникальным. Затем я буду использовать запрос, чтобы найти все сообщения / билеты с этим билетом.
Вы можете добиться с помощью кода ниже. Он будет генерировать уникальный номер билета каждый раз
$brand = '#ref';
$cur_date = date('d').date('m').date('y');
$invoice = $brand.$cur_date;
$customer_id = rand(00000 , 99999);
$uRefNo = $invoice.'-'.$customer_id;
echo $uRefNo;