Bartash написав:TRYCUKI_V_KROVI написав:Я тільки що спробував цю процедуру. і ніфіга вона не робить
DECLARE @state int;
SELECT @id=Id,@state=state FROM login_t WHERE Login=@Login AND Password=@Password
IF @id IS NOT NULL AND @state=0
UPDATE login_t SET State=1 WHERE Id=@id
По-перше в Declare не треба @. По-друге в SELECT треба @id:=id. От, а по-трете воно не робить взагалі ніяк, тому що перший Select хоче повернути якесь значення і якщо все після нього видалити все, то так і є, повертаєтся значення id, а в іншому разі все просто тормозить і при запуску процедури просто висить табличка - "завантаження" і так цілу вічність.
По-нульове:
Bartash написав:Наведу приклад на SQL Server:
Я працюю на mssql, тому не знаю напам'ять синтаксису мускула.
Не підходить варіант - візміть апдейт від koala і запишіть результат у змінну (кількість рядків, задіяних у запиті).
ой xD Ну той апдейт, звичайно, нічо так. Але я трохи передумав. Воно ось як. Якщо комбінації нема, значить не вірний логін або пароль, якщо state=1, значить цей юзер вже зайшов в гру. То й думаю, було б не погано це відловлювати. Наприклад, якщо перше, то відправляємо той нуль, якщо друге, то відправляємо -1, а якщо все ОК, то відправляємо id юзера. І все було б легко, я б зробив щось типу цього
Declare user_id int;
Declare user_state int;
select @user_id:=id from login_t where login=log AND password=psw;
if user_id!=0 Then
select @user_state:=state from login_t where id=user_id;
if user_state==0 Then
update login_t SET state=1 where id=user_id;
select user_id;
ELSE
select -1;
ENDIF;
ELSE select 0;
ENDIF;
але синтаксис такий калічний, в одному джерелі він один, в іншому - інший, в мене матюкаєтся на будь-який синтакис і + до цього ніколи не зрозуміло в чому проблема. А ще й глюк якийсь з select'ом. Ну не може селект просто взяти і присвоїти змінній значення.