首页 > 解决方案 > MySql 数据库卡在指令 ORDER BY RAND

问题描述

所以我有一个大学项目,我必须在 MySql 中创建一个关于管理足球比赛的数据库,我有这个程序来填写一个完整的赛季,但是当我调用它时它崩溃了一半。我真的不知道怎么可能。我什至把它发给了我的一个朋友,他的电脑更好,崩溃率变得更糟。如果您想仔细查看,代码段粘贴在下面。链接是如果你想测试整个事情。在此先感谢,很抱歉参数是葡萄牙语。提前致谢。链接:https ://codeshare.io/5zbb4W

    DROP PROCEDURE IF EXISTS create_jornada_primeira_volta;
    DELIMITER @

    CREATE PROCEDURE create_jornada_primeira_volta()
    BEGIN
    DECLARE xepoca, xcompeticao, xepoca2, xjornada, cnt, njogos INT;
    SELECT cod_epoca, cod_competicao INTO xepoca, xcompeticao FROM Epoca GROUP BY cod_epoca DESC LIMIT 1;
    SELECT num_jornada, cod_epoca INTO xjornada, xepoca2 FROM Jornada GROUP BY cod_epoca DESC LIMIT 1;
    IF (xepoca != xepoca2 OR xjornada IS NULL) THEN
        SET xjornada = 1;
    ELSE 
        SET xjornada = xjornada + 1;
    END IF;
    SELECT num_equipas(xcompeticao)/2 INTO njogos;
    SET cnt = 0;
    INSERT INTO Jornada VALUES (xjornada, xepoca, xcompeticao);
    WHILE (cnt != njogos) DO
        CALL create_jogo_primeira_volta;
        SET cnt = cnt + 1;
    END WHILE;
END;
@
DELIMITER ;

DROP PROCEDURE IF EXISTS create_jornada_segunda_volta;
DELIMITER @

CREATE PROCEDURE create_jornada_segunda_volta()
BEGIN
    DECLARE xepoca, xcompeticao, xjornada, cnt, njogos, xequipa_visitada, xequipa_visitante, xinfraestrutura, xequipa_arbitragem INT;
    SELECT cod_epoca, cod_competicao INTO xepoca, xcompeticao FROM Epoca GROUP BY cod_epoca DESC LIMIT 1;
    SELECT num_jornada INTO xjornada FROM Jornada GROUP BY num_jornada DESC LIMIT 1;
    SET xjornada = xjornada + 1;
    SELECT num_equipas(xcompeticao)/2 INTO njogos;
    SET cnt = 0;
    INSERT INTO Jornada VALUES (xjornada, xepoca, xcompeticao);
    WHILE (cnt != njogos) DO
        SELECT cod_visitado, cod_visitante 
            INTO xequipa_visitante, xequipa_visitada
            FROM Jogo 
            Where num_jornada = xjornada - (num_equipas(xcompeticao) * 2 - 2) / 2 AND cod_epoca = xepoca 
            ORDER BY cod_equipa_arbitragem
            LIMIT cnt,1;
        CALL create_equipa_arbitragem;
        SELECT cod_equipa_arbitragem INTO xequipa_arbitragem FROM Equipa_arbitragem GROUP BY cod_equipa_arbitragem DESC LIMIT 1;
        SELECT cod_infraestrutura INTO xinfraestrutura FROM Infraestrutura WHERE tipo = 'Estadio' AND cod_clube = (SELECT cod_clube FROM Equipa WHERE cod_equipa = xequipa_visitada);
        INSERT INTO Jogo VALUES (xepoca, xcompeticao, xjornada, xequipa_visitada, xequipa_visitante, xequipa_arbitragem, xinfraestrutura, null, null);
        SET cnt = cnt + 1;
    END WHILE;
END;
@
DELIMITER ;

DROP PROCEDURE IF EXISTS create_epoca;
DELIMITER @

CREATE PROCEDURE create_epoca()
BEGIN
    DECLARE ncompeticoes, cnt_comp, cnt_jornadas, nepoca, njornadas INT;
    SELECT COUNT(*) INTO ncompeticoes FROM Competicao;
    SET cnt_comp = 1;
    SELECT cod_epoca INTO nepoca FROM Epoca GROUP BY cod_epoca DESC LIMIT 1;
    IF nepoca IS NULL THEN
        SET nepoca = 1;
    ELSE 
        SET nepoca = nepoca + 1;
    END IF;
    WHILE (cnt_comp != (ncompeticoes + 1)) DO
        INSERT INTO Epoca VALUES (nepoca, cnt_comp, 2017, CURDATE(), null, null);
        SELECT ((num_equipas(cnt_comp) * 2 - 2) / 2) INTO njornadas;
        SET cnt_jornadas = 0;
        WHILE (cnt_jornadas < njornadas) DO 
            CALL create_jornada_primeira_volta;

            SET cnt_jornadas = cnt_jornadas + 1;
        END WHILE;
        SET cnt_jornadas = 0;
        WHILE (cnt_jornadas != njornadas) DO 
            CALL create_jornada_segunda_volta;
            SET cnt_jornadas = cnt_jornadas + 1;
        END WHILE;
        SET cnt_comp = cnt_comp + 1;
    END WHILE;
END;
@
DELIMITER ;

标签: mysqlrandom

解决方案


推荐阅读