Сообщение от
MassonNN
Рассказываю как я сделал у себя промокоды (возможно ты именно так и хочешь сделать).
У меня просто есть база данных с промокодами,там прописаны все условия получения, количество денег/опыта/дней випки и т.д. Когда игрок вводит промокод, этот код добавляется к нему в базу данных с помощью CONCAT. А при вводе промокода идёт проверка через SELECT * FROM account WHERE promoused LIKE '%%e%' AND Name = '%s'
Таким образом, если он уже использовал этот промокод, то он не может его ввести.
Также в таблице промокодов есть графа на то, сколько осталось использований. С каждым введением уменьшается на 1 и если равно нулю, то промокод не находится. Если хочешь можно сделать с рестартом удаление всех промокодов где использований осталось 0. Ну вот в общем все, надеюсь я правильно понял суть вопроса.
Гораздо лучше и проще создать отдельную базу, в которой будет хранится информация о промокодах, и отдельную базу, в которой будут записываться использования промокодов игроками. Без всяких CONCAT и прочего.
Вторая таблица будет иметь структуру, по типу:
PHP код:
id | account_id | promocode_id
Где:
id - AUTO_INCREMENT
А для account_id и promocode_id создаются индексы (можно даже сделать составной индекс для пущей скорости обработки, если не планируется делать какую-то выборку только по promocode_id или account_id).
Такой вариант гораздо гибче (можно и количество использованных промокодов без труда посчитать, и вывести все использованные промокоды без предварительной обработки строки, и т.п.) и не имеет каких-либо ограничений по числу использованных промокодов (не считая доступной памяти на жестком диске). Собственно, даже подсчёт количества использований того или иного промокода можно будет сделать путём реального подсчёта реальных использований, а не путём прибавления единицы к какому-нибудь столбцу каждое использование.