Advertisement
Piexplode

sp_CreateTournament - V3

Aug 12th, 2020 (edited)
1,275
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
MySQL 5.06 KB | None | 0 0
  1. IF (SELECT COUNT(1) FROM vw_ActiveSeasonRefs A WHERE A.SeasonName = VarSeasonName) = 1
  2. THEN
  3.     IF (SELECT COUNT(1)  
  4.           FROM t_SeasonTourData S
  5.           JOIN vw_ActiveSeasonRefs A
  6.             ON S.SeasonReference = A.ActiveSeasonRef
  7.          WHERE A.SeasonName = VarSeasonName
  8.            AND S.Playoffs = 1) = 1
  9.     THEN
  10.       SELECT 'This season is complete. No new tournaments may be created until the next season is initalised.';
  11.     ELSEIF (SELECT MAX(S.SeasonTourNo)
  12.               FROM t_SeasonTourData S
  13.               JOIN vw_ActiveSeasonRefs A ON S.SeasonReference = A.ActiveSeasonRef
  14.              WHERE A.SeasonName = VarSeasonName) <= 2
  15.     THEN
  16.         IF (SELECT COUNT(1)
  17.               FROM t_SeasonTourData S
  18.               JOIN vw_ActiveSeasonRefs A ON S.SeasonReference = A.ActiveSeasonRef
  19.               JOIN t_Tournaments T       ON T.SeasonTourIdFk = S.SeasonTourIdPk
  20.              WHERE A.SeasonName = VarSeasonName
  21.                AND T.ProgressIdFk = 2) = 0
  22.         THEN
  23.             IF (SELECT COUNT(1)
  24.                   FROM t_Tiers
  25.                  WHERE TierName = VarTierName) = 1
  26.             THEN
  27.            INSERT INTO t_SeasonTourData (SeasonIdFk, SeasonNo, SeasonTourNo, StartDate, Playoffs, SeasonReference)
  28.                 SELECT D.SeasonIdFk,
  29.                        MAX(D.SeasonNo) AS SeasonNo,
  30.                        MAX(D.SeasonTourNo) + 1 AS SeasonTourNo,
  31.                        CUR_DATE() AS StartDate,
  32.                        0 AS Playoffs,
  33.                        D.SeasonReference
  34.                   FROM t_Seasons S
  35.                   JOIN t_SeasonTourData D ON S.SeasonIdPk = D.SeasonIdFk
  36.                  WHERE S.SeasonName = VarSeasonName
  37.               GROUP BY D.SeasonIdFk, D.SeasonReference;
  38.      
  39.            INSERT INTO t_Tournaments (TierIdFk, TourStructureIdFk, SeasonTourIdFk)
  40.                 SELECT IFNULL(SeasonTierId,TierIdPk) AS TierIdFk,
  41.                        1 AS TourStructureIdFk,
  42.                        MAX(SeasonTourIdPk) AS SeasonTourIdFk
  43.                   FROM t_Seasons S
  44.                   JOIN t_SeasonTourData D ON S.SeasonIdPk = D.SeasonIdFk
  45.             CROSS JOIN t_Tiers T
  46.                  WHERE S.SeasonName = VarSeasonName
  47.                    AND T.TierName = VarTierName
  48.               GROUP BY IFNULL(SeasonTierId,TierIdPk);    
  49.             ELSE
  50.                 SELECT 'Invalid Tier Name' AS ErrorMessage;
  51.             END IF;
  52.         END IF;
  53.        
  54.         CREATE TEMPORARY TABLE tt_SetIds (SetId INT);
  55.  
  56.         INSERT INTO tt_SetIds (SetId)
  57.         WITH RECURSIVE cte_SetIds AS
  58.            (SELECT 1 AS SetId
  59.              UNION ALL
  60.             SELECT SetId + 1
  61.               FROM cte_SetIds
  62.              WHERE SetId + 1 <= (SELECT POW(2,CEIL(LOG(2,(SELECT COUNT(1)
  63.                                                             FROM t_Signups S
  64.                                                             JOIN vw_ActiveSeasonRefs A
  65.                                                               ON S.SeasonRefFk = A.ActiveSeasonRef
  66.                                                            WHERE A.SeasonName = VarSeasonName)) - 0.5)) AS BracketSize))
  67.         SELECT SetId
  68.           FROM cte_SetIds;
  69.  
  70.         CREATE TEMPORARY TABLE tt_Players (SeedId INT PRIMARY KEY, PlayerId INT);
  71.        
  72.         INSERT INTO tt_Players (SeedID, PlayerId)
  73.         SELECT S.SetId,
  74.                IFNULL(PlayerId,1)
  75.           FROM tt_SetIds S
  76.     CROSS JOIN t_Seasons S2
  77.           JOIN t_SeasonTourData D ON D.SeasonIdFk = S2.SeasonIdPk
  78.           JOIN t_Tournaments T    ON T.SeasonTourIdFk = D.SeasonTourIdPk
  79.      LEFT JOIN vw_PrioritisedSignups_WithSubrandomisation P
  80.             ON S.SetID = P.SignupPriority
  81.            AND P.SeasonRef = D.SeasonReference
  82.            AND T.ProgressIdFk = 2
  83.          WHERE S2.SeasonName = VarSeasonName;
  84.          
  85.    INSERT INTO t_Substitutes (TourIdFk, PlayerIdFk)
  86.         SELECT TourIdPk AS TourIdFk,
  87.                PlayerIdFk
  88.           FROM vw_PrioritisedSignups P
  89.      LEFT JOIN tt_SetIds I ON I.SetId = P.SignupPriority
  90.           JOIN t_SeasonTourData D ON P.SeasonRef = D.SeasonReference
  91.           JOIN t_Seasons S        ON D.SeasonIdFk = S.SeasonIdPk
  92.           JOIN t_Tournaments T    ON T.SeasonTourIdFk = D.SeasonTourIdPk
  93.          WHERE I.SetId IS NULL
  94.            AND S.SeasonName = VarSeasonName;
  95.  
  96.    DELETE FROM tt_SetIds WHERE SetID = (SELECT MAX(SetId) FROM tt_SetIds);
  97.                                                          
  98.    INSERT INTO t_Sets (TourSetId, TourIdFk, Player1IdFk, Player2IdFk)
  99.         SELECT I.SetId AS TourSetId,
  100.                TourIdPk AS TourIdFk,
  101.                IFNULL(P1.PlayerId,1) AS Player1IdFk,
  102.                IFNULL(P2.PlayerId,1) AS Player2IdFk
  103.           FROM tt_SetIds I
  104.      LEFT JOIN tt_SetIds I2
  105.             ON I.SetID * 2 = I2.SetID + 1
  106.     CROSS JOIN t_Tournaments T
  107.           JOIN t_SeasonTourData S ON T.SeasonTourIdFk = S.SeasonTourIdPk
  108.           JOIN t_Seasons S2       ON S2.SeasonIdPk = S.SeasonIdFk
  109.      LEFT JOIN tt_Players P1      ON I2.SetID IS NOT NULL AND P1.SeedId = I.SeedId
  110.      LEFT JOIN tt_Players P2      ON I2.SetID IS NOT NULL AND P2.SeedId + 2 = (SELECT MAX(SetId) FROM tt_SetIds) -  I.SeedId
  111.          WHERE ProgressIdFk = 2
  112.            AND S2.SeasonName = VarSeasonName;
  113.  
  114. -- generate bracket data into t_TourStages
  115.  
  116.     ELSE
  117.         SELECT 'Playoffs are not yet supported';
  118.     END IF;
  119. ELSE
  120.  SELECT 'Invalid Season Name';
  121. END IF
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement