[Help] SQL Query

Това ще дава на всички еднакви точки обаче

Точно нищо няма да дава, никога в Character таблицата не е имало колонка кредити. Кредитите обикновенно са в колонка Memb_Credits и там имаш колонка memb___id, която е акаунт. Точките от евентите са за характер участвал в евента, а кредитите се дават на акаунт. Така, че какво правим ако пет героя от един и същ акаунт печелят 1 до 5-то място. Така както си описал условието излиза, че трябва да даваме на акаунта 1000+900+800+700+600=4000 кредита.

Отделно точките от евентите никога не са били в таблица Character, единствено skyevent, който добави Дарк преди време е там. Всичко останало в едни години беше в отделна база дори, а при 97д в отделни таблици EVENT_INFO_BC и EVENT_INFO. По мои спомени EVENT_INFO_BC записваше точки само от BC евент, не помня изобщо DS и другите къде се записват, може би EVENT_INFO. Затова казах, че за да се напише едно куери (което според мен е глупаво, защото няма да имаш контрол ако нещо гръмне) трябва да има база със записи или поне уточнение кое къде точно се записва за да се разпише и тества.

Тук говорим за селекция на поне две таблици и ъпдейт на две, перфектното решение е и да се прави допълнителен запис на история с промените, защото как така ресетваш точки, даваш кредити и утре като те питат, защо им ги няма кредитите или точките от евентите, даже не можеш да отговориш, защото нямаш история.

Човека иска една заявка за всиките операции по-горе, нали не съм с грешка?

После се чудим, защо нямаме играчи :D
 
Last edited:
  • Like
Reactions: hA7SH9dks
Това ще дава на всички еднакви точки обаче
мерси, аз просто искам да Видя готови кодове, разбирасе че няама да ги използвам така ккакто са а ще ги преправя, нямам намерение и време да си играя да уча СЯЛ за в момента, такаче благодаря за кодовете.
 
Точно нищо няма да дава, никога в Character таблицата не е имало колонка кредити. Кредитите обикновенно са в колонка Memb_Credits и там имаш колонка memb___id, която е акаунт. Точките от евентите са за характер участвал в евента, а кредитите се дават на акаунт. Така, че какво правим ако пет героя от един и същ акаунт печелят 1 до 5-то място. Така както си описал условието излиза, че трябва да даваме на акаунта 1000+900+800+700+600=4000 кредита.

Отделно точките от евентите никога не са били в таблица Character, единствено skyevent, който добави Дарк преди време е там. Всичко останало в едни години беше в отделна база дори, а при 97д в отделни таблици EVENT_INFO_BC и EVENT_INFO. По мои спомени EVENT_INFO_BC записваше точки само от BC евент, не помня изобщо DS и другите къде се записват, може би EVENT_INFO. Затова казах, че за да се напише едно куери (което според мен е глупаво, защото няма да имаш контрол ако нещо гръмне) трябва да има база със записи или поне уточнение кое къде точно се записва за да се разпише и тества.

Тук говорим за селекция на поне две таблици и ъпдейт на две, перфектното решение е и да се прави допълнителен запис на история с промените, защото как така ресетваш точки, даваш кредити и утре като те питат, защо им ги няма кредитите или точките от евентите, даже не можеш да отговориш, защото нямаш история.

Човека иска една заявка за всиките операции по-горе, нали не съм с грешка?

После се чудим, защо нямаме играчи :D
не ми е проблем и 5 заявки да са
ше ги пусна в сял агента като жоб-ове
давайте оше примерни кодове ако Ви се занимава докато не съм ви заменим с чат ГТП-то :D
 
Нещо такова :D
SQL:
MERGE INTO MEMB_CREDITS AS target
USING (
  SELECT TOP 5 ROW_NUMBER() OVER(ORDER BY SkyEventWins DESC) AS rank_id, AccountID
  FROM Character
  WHERE SkyEventWins > 0
) AS source
ON target.memb___id = source.AccountID

WHEN MATCHED THEN
  UPDATE SET target.credits = target.credits + (1000 - (source.rank_id * 100 - 100))
WHEN NOT MATCHED THEN
  INSERT (memb___id, credits) VALUES (source.AccountID, 1000 - (source.rank_id * 100 - 100));

-- Рестартираме класацията..

UPDATE Character SET SkyEventWins = 0;
 
  • Like
Reactions: hA7SH9dks
USE [MuOnline]
GO
/****** Object: StoredProcedure [dbo].[WZ_CustomArenaRanking] Script Date: 12/07/2015 22:13:41 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER Procedure [dbo].[WZ_CustomArenaRanking]
@Account varchar(10),
@Name varchar(10),
@ArenaNumber int,
@UserScore int,
@UserRank int
AS
BEGIN

SET NOCOUNT ON
SET XACT_ABORT ON

IF(@ArenaNumber = 0)
BEGIN

IF(@UserRank = 1)
BEGIN

UPDATE CashShopData SET GoblinPoint = GoblinPoint + 100 WHERE AccountID = @Account

END

END

SET NOCOUNT OFF
SET XACT_ABORT OFF

END









Погледни това може да ти помогне само трябва да си промениш Датабазите.
 
  • Like
Reactions: hA7SH9dks
Нито едно в целта, но това вече е по-близко:
SQL:
CREATE PROCEDURE [dbo].[weekly_events]
AS
BEGIN
    -- Step 1: Combine the points for each character from all events (Square, Bridge, and SkyEventWins)
    WITH EventPoints AS (
        SELECT AccountID, CharacterName, Class, SUM(Point) AS TotalPoints
        FROM (
            SELECT AccountID, CharacterName, Class, Point
            FROM [MuOnline].[dbo].[EVENT_INFO]
            UNION ALL
            SELECT AccountID, CharacterName, Class, Point
            FROM [MuOnline].[dbo].[EVENT_INFO_BC]
            UNION ALL
            SELECT AccountID, Name AS CharacterName, Class, SkyEventWins AS Point
            FROM [MuOnline].[dbo].[Character]
        ) AS CombinedEvents
        GROUP BY AccountID, CharacterName, Class
    ),

    -- Step 2: Rank the characters based on their total points
    RankedCharacters AS (
        SELECT AccountID, CharacterName, Class, TotalPoints, RANK() OVER (ORDER BY TotalPoints DESC) AS Rank
        FROM EventPoints
    ),

    -- Step 3: Calculate the credits for each character based on their rank
    CharacterCredits AS (
        SELECT AccountID, CharacterName, Class, TotalPoints, Rank,
        CASE
            WHEN Rank = 1 THEN 1000
            WHEN Rank = 2 THEN 900
            WHEN Rank = 3 THEN 800
            WHEN Rank = 4 THEN 700
            WHEN Rank = 5 THEN 600
            WHEN Rank = 6 THEN 500
            WHEN Rank = 7 THEN 400
            WHEN Rank = 8 THEN 300
            WHEN Rank = 9 THEN 200
            WHEN Rank = 10 THEN 100
            ELSE 0
        END AS Credits
        FROM RankedCharacters
    ),

    -- Step 4: Summarize the credits for all characters belonging to the same account
    AccountCredits AS (
        SELECT AccountID, SUM(Credits) AS TotalCredits
        FROM CharacterCredits
        GROUP BY AccountID
    )

    -- Step 5: Update the Memb_Credits table with the summarized credits for each account
    UPDATE mc
    SET mc.credits = mc.credits + ac.TotalCredits
    FROM [MuOnline].[dbo].[Memb_Credits] mc
    JOIN AccountCredits ac ON mc.memb___id = ac.AccountID;

    -- Step 6: Reset the points in the EVENT_INFO, EVENT_INFO_BC tables, and Character table
    UPDATE [MuOnline].[dbo].[EVENT_INFO] SET Point = 0;
    UPDATE [MuOnline].[dbo].[EVENT_INFO_BC] SET Point = 0;
    UPDATE [MuOnline].[dbo].[Character] SET SkyEventWins = 0;
END;


SQL:
EXEC [dbo].[weekly_events];
 
Last edited: