в таблице данных у меня есть столбец rubies(рубли игровые) когда игрок покупает что то рубли уменьшаются,как сделать чтобы в минус игровой эквивалент не уходил тобишь рубли? баланс 15 рублей - 16 рублей(покупка) = -1 нужно чтоб только больше или равно 0 было. Добавлено спустя 23 секунды: это в базе данных делается или в запросе к базе данных?
Есть у тебя $balance (счет игрока) и $price (цена предмета). При покупке сравнивай их. Если $price>$balance, то пиши, мол, "Вы нищеброд". Можно в 2 этапа сделать. Сначала в клиенте проверяешь, и там сразу обрабатываешь все, мол, если денег хватает, то прокидываешь запрос на сервер, чтобы оплата прошла, в противном случае не прокидываешь запрос. Сэкономишь на запросах, собсно, практически задаром. Нефиг заведомо "отказные" запросы принимать и рассматривать, не стоят серверные мощности того. И вторым уровнем - вышеописанная проверка на стороне сервера, когда запрос-таки прошел валидацию на стороне клиента и ушел дальше, на случай, если кто-то особо умный поправит данные на странице. На деле это ничем не отличается от двойной валидации форм по смыслу
ещё можно изменить тип поля, сделав его unsigned тогда отрицательные числа в него сама БД не даст сохранить.
Имхо, лучше до этого не доводить. А то, если неаккуратно прицелиться, можно выстрелить себе в ногу тем, что шмотка куплена, а деньги вообще не потратились. Я бы в базу писал тогда, когда уверен, что все уже корректно. Да и зачем дергать базу ради заведомо пофейленой транзакции, если дешевле ее не допустить?
если ты будешь внимательнее, ты сможешь заметить, что я начал своё сообщение со слов: 'ещё можно' т.е. это дополнительно к твоим советам, а не вместо них. ТС спросил как сделать в бд неотрицательное поле - я ответил. а что лучше/хуже для него пусть решает сам ТС.
Окей. Кстати, в некоторых гамах, например в EveOnline игровой счет может быть отрицательным Сам ты, разумеется, не можешь там потратить денег больше, чем имеешь. А вот администрация, если ты попался на нарушении EULA, может впаять неиллюзорный штраф независимо от твоих средств.
по хорошему, все операции с деньгами, производятся одной транзакцией. в которой все сопутствующие изменения в таблицах. и если где-то чтото не прошло, то ролбек. т.е. даже если где-то в бизнес логике есть дыра, на уровне БД отрицательного баланса не будет(как не будет и других связанных с этой покупкой изменений, кроме может, лога попыток покупок). а если начать фантазировать о том где и как можно прострелить себе ногу, то я могу предположить, что автор может прошляпить, и гдето потерять знак баланса..... клиенты будут делать покупку за покупкой, становясь все богаче и богаче.