2013-04-27 2 views
0

У меня есть две таблицы.Продвинутый SQL-запрос для ускорения операции

Один Started_Games:

level_id INT 
user_id INT 

Другой Statistics:

stat_id INT 
stat_key NVARCHAR[30] 
stat_value INT 

Моя веб-приложение состоит из игры с уровнями, которые только члены могут играть в

После запуска каждого из них. игра, вызывается функция и делает следующее (в одном выражении SQL): Если нет записи, содержащей оба e Id пользователя и начальный уровень игры - добавьте его в таблицу Started_Games.

Когда пользователь выходит из системы, я хочу сделать (требуется только SQL) следующее:

Во-первых, выберите количество уровней игры он начал. Затем обновите таблицу Statistics в определенной строке с помощью stat_key = StartedGamesCount и добавьте к ней счетчик, который был найден. После этого удалите все записи текущего пользователя («подсчитанные» строки);

Я никогда не реализовал несколько операторов SQL в одном запросе, и это то, что я придумал до сих пор:

DELETE FROM [Started_Games] WHERE [user_id] IN (SELECT COUNT(*) FROM [Started_Games] WHERE [user_id] = @UserId) 

Примечание это не включает в себя процесс обновления, я хочу выполнить.

Любая помощь?

ответ

0

Я бы рекомендовал вам написать инструкцию по обновлению, а затем включить операторы обновления и удаления в хранимую процедуру и вызвать это из вашего кода. В противном случае вы можете просто сделать два вызова базы данных, один, чтобы сделать обновление и один удалить

create procedure sort_out_user @user_id int 
as 
begin 
    update .... 

    delete from .... 
end 

This might help

+0

Making более одного обращения к базе данных это именно то, чего я хочу избежать. На данный момент мне не разрешено использовать хранимые процедуры. Этот вопрос попросил помочь мне закончить проект, который мне нужно передать через два месяца. – Novak

0

Возможно это будет полезно для вас -

CREATE PROCEDURE dbo.log_out 
(
    @UserId INT 
) 
AS BEGIN 

    INSERT INTO dbo.[Statistics](stat_id, stat_key, stat_value) 
    SELECT [user_id], '???', COUNT(1) 
    FROM dbo.Started_Games 
    WHERE [user_id] = @UserId 
    GROUP BY [user_id] 

    DELETE FROM dbo.Started_Games 
    WHERE [user_id] = @UserId 

END 
Смежные вопросы