Don't like ads? PRO users don't see any ads ;-)
Guest

Untitled

By: a guest on May 24th, 2012  |  syntax: None  |  size: 2.58 KB  |  hits: 12  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. Mysql Stored procedure for a Fixture
  2. DROP PROCEDURE IF EXISTS gen_par;
  3.  
  4. CREATE PROCEDURE gen_par()
  5. BEGIN
  6.     DROP TABLE IF EXISTS tmpPool;
  7.     DROP TABLE IF EXISTS tmpFixture;
  8.  
  9.     CREATE TEMPORARY TABLE tmpPool (
  10.         J           INT NOT NULL AUTO_INCREMENT,
  11.         ID          INT NOT NULL,
  12.         unpicked    BIT NOT NULL DEFAULT 1
  13.         , PRIMARY KEY ( J )
  14.     );
  15.     CREATE TEMPORARY TABLE tmpFixture (
  16.         ID          INT NOT NULL AUTO_INCREMENT,
  17.         HomeID      INT NOT NULL,
  18.         AwayID      INT NOT NULL,
  19.         GrpNum      INT NOT NULL,
  20.         PRIMARY KEY ( `ID` )
  21.     );
  22.  
  23.     INSERT INTO tmpPool (ID)
  24.     SELECT      id
  25.     FROM        equipos
  26.     ORDER BY    id;
  27.  
  28.     SELECT  COUNT(*)  INTO  @NumTeams  FROM tmpPool;
  29.     IF @NumTeams % 2    THEN
  30.         INSERT INTO tmpPool (ID) VALUES (0);
  31.         SET @NumTeams       = @NumTeams + 1;
  32.     END IF;
  33.  
  34.     ALTER TABLE  tmpPool  CHANGE COLUMN J  J  INT      NOT NULL
  35.     , ADD INDEX  J_foo  (J ASC)
  36.     , DROP PRIMARY KEY;
  37.  
  38.     SET SQL_SAFE_UPDATES    = 0;   -- Kill bogus warnings on updates.
  39.  
  40.     SET     @GroupNum       = 1;
  41.     WHILE   @GroupNum < @NumTeams  DO
  42.         REPEAT
  43.             SELECT  ID INTO @Home FROM tmpPool  WHERE unpicked = 1  ORDER BY J ASC   LIMIT 1;
  44.             SELECT  ID INTO @Away FROM tmpPool  WHERE unpicked = 1  ORDER BY J DESC  LIMIT 1;
  45.  
  46.             INSERT INTO tmpFixture (HomeID, AwayID, GrpNum)
  47.             VALUES      (@Home, @Away, @GroupNum);
  48.  
  49.             UPDATE  tmpPool  SET unpicked = 0  WHERE ID = @Home  OR  ID = @Away;
  50.  
  51.             SELECT  COUNT(*) INTO  @TeamsLeft  FROM tmpPool  WHERE unpicked = 1;
  52.  
  53.         UNTIL @TeamsLeft < 1
  54.         END REPEAT;
  55.  
  56.         SET @GroupNum = @GroupNum + 1;
  57.         UPDATE  tmpPool  SET unpicked = 1;
  58.  
  59.         UPDATE  tmpPool  SET J = J + 1  WHERE J > 1;
  60.         UPDATE  tmpPool  SET J = 2      WHERE J = @NumTeams + 1;
  61.     END WHILE;
  62.  
  63.     INSERT INTO
  64.         partidos (eqloc, eqvis)
  65.     SELECT
  66.         IF( F.HomeID = 0, (SELECT id FROM equipos eq WHERE eq.id = F.AwayID), (SELECT id FROM equipos eq WHERE eq.id = F.HomeID) ),
  67.         IF( F.AwayID = 0 || F.HomeID = 0, 0, (SELECT id FROM equipos eq WHERE eq.id = F.AwayID) ),
  68.     FROM
  69.         tmpFixture F
  70.         ORDER BY
  71.                 F.GrpNum,
  72.             1;
  73.     END;
  74.        
  75. [Err] 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'FROM
  76.     tmpFixture F
  77.     ORDER BY
  78.             F.GrpNum,
  79.             1;
  80.   END' at line 65
  81.        
  82. IF( F.AwayID = 0 || F.HomeID = 0, 0, (SELECT id FROM equipos eq WHERE eq.id = F.AwayID) ),
  83. FROM
  84.     tmpFixture F