Ребята такая проблема хочу сделать донатный сервер и чтобы каждый чар вводил свой уникальный e-mail. Далее мне приходит от Яндекса его e-mail и я ввожу этот e-mail с кол-вом денег в MySQL, и активом=0. Далее на чаре происходит проверка раз в секунду и если мыла совпадают (MySQL с TAG.E-MAIL), то падает определённое кол-во монет в банк. Проблема вот в чём, что, если он у меня закажет монеты 10 раз, а войдёт в игру после этого. И status=1 изменится сразу во всех 10, а мне надо по 1. Извините просто я плохо знаю MySQL или программист из меня плохой. Помогите пожалуйста!
on=@timer
db.query SELECT * FROM moneys WHERE email="<CONT.TAG.E-MAIL>" and status=0
if <db.row.numrows> > 0
cont.f_add_gold <db.row.money>
db.execute UPDATE moneys SET status = 1 WHERE email="<CONT.TAG.E-MAIL>"
CONT.SYSMESSAGE @color_o_gold <db.row.money> gp put in your bank!
endif
timer=1
return 1
Надо, чтобы значение status=1 менялось по 1, а не сразу все?
Тебе либо айдишники ещё нужны, либо Timestamp инсерта.
У тебя нет никакой индикации конкретной записи. Ты достаёшь селектом записи, причем все. А потом апдейтищь сразу все.
Тебе нужно достать 1 запись и по какому-то индикатору её же проапдейтить.
Индикатором можеть быть Id или TimeStamp в момент инсерта например. Тоесть в любом случае нужно ещё 1 поле для определения записи.
Понятно?
Да, а что, если db.execute delete from moneys where email="<CONT.TAG.E-MAIL>" limit 1, нормально удалять будет по 1?
Таблица БД должна выглядеть таким образом:
_______________________________________________________
| Transaction.ID | User.Email | Money.Amount | Status |
|______________________________________________________|
| Integer | String | Integer | Integer |
|______________________________________________________|
1. Ищешь одну запись с нужным имейлом и статусом 0
db.query SELECT * FROM moneys WHERE User.Email="<CONT.TAG.E-MAIL>" and Status=0 LIMIT 1
db.execute UPDATE moneys SET Status=1 WHERE User.Email="<CONT.TAG.E-MAIL>" and Transaction.ID="<db.row.TransactionID>"
Спасибо что разжевал за меня
Правда иногда полезно что-бы сами помучались, как показывает практика
Кстати, тут есть вообще мега простое решение.
Зачем по 1 записи ковырять? Берёшь весь селект со статусом 0 и мылом х, берешь его сумму по деньгам, выкидываешь в банк и апдейтишь статус на 0. Даже айдишники не нужны будут, но по нормальному в таблице их желательно иметь, либо уникальный ключ из других полей.
А вот и вариант *всё сразу*:
on=@timer
db.query SELECT SUM(money) FROM moneys WHERE email="<CONT.TAG.E-MAIL>" and status=0
if <db.row.numrows> > 0
cont.f_add_gold <db.row.money>
db.execute UPDATE moneys SET status = 1 WHERE email="<CONT.TAG.E-MAIL>"
CONT.SYSMESSAGE @color_o_gold <db.row.money> gp put in your bank!
endif
timer=1
return 1
Да, спасибо!
Русская версия Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)