Ir para conteúdo
Fórum Script Brasil
  • 0

UPDATE DE TABELA COM SELECT


José Luiz Tanoeiro

Pergunta

Boa tarde, estou fazendo uma tabela de classificação de campeonato em mysql, na tabela 1 tenho os confrontos com os placares (p1e p2) e os resultados (v,d,e) na coluna RES, sempre levando em consideração o TIME_A, porém quando faço update para tabela de classificação tabela 2 das colunas "J", "D" ,"E" não consigo com o codigo abaixo:

UPDATE sub07 SET V = (SELECT (SELECT COUNT('V') FROM tab_sub07 WHERE TIME_A = CLUBE), (SELECT COUNT('D') FROM tab_sub07 WHERE TIME_B = CLUBE) FROM tab_sub07);

UPDATE sub07 SET D = (SELECT COUNT('D') FROM tab_sub07 WHERE TIME_B = CLUBE);

UPDATE sub07 SET E = (SELECT COUNT('E') FROM tab_sub07 WHERE P1 = P2);

me ajudem por favor

TAB_JOGOS.png

CLASSIFICAÇÃO.png

Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 0

Como eu não entendo nada de futebol, eu criei duas tabelas:

CREATE TABLE `tbjogos` (
  `idjogo` int NOT NULL AUTO_INCREMENT,
  `time_a` varchar(45) COLLATE utf8_swedish_ci DEFAULT NULL,
  `time_b` varchar(45) COLLATE utf8_swedish_ci DEFAULT NULL,
  `gols_a` int DEFAULT NULL,
  `gols_b` int DEFAULT NULL,
  PRIMARY KEY (`idjogo`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb3 COLLATE=utf8_swedish_ci

dados utilizados:
1,Remo,CDMI,1,1
2,Paysandu,CDMI,1,4
3,Remo,Paysandu,2,0

----------------------------------------------------------------------------------

CREATE TABLE `tbtimes` (
  `idtime` varchar(45) COLLATE utf8_swedish_ci NOT NULL,
  PRIMARY KEY (`idtime`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8_swedish_ci

dados utilizados:
CDMI
Paysandu
Remo

				

 

Para ver todo o campeonato, usando cada time como referência, usei o view vw_placar

 

CREATE 
    ALGORITHM = UNDEFINED 
    DEFINER = `root`@`localhost` 
    SQL SECURITY DEFINER
VIEW `vw_placar` AS
    SELECT 
        `tbtimes`.`idtime` AS `idtime`,
        `tbjogos`.`time_a` AS `time_a`,
        `tbjogos`.`time_b` AS `time_b`,
        `tbjogos`.`gols_a` AS `gols_a`,
        `tbjogos`.`gols_b` AS `gols_b`,
        POSICAO(`tbtimes`.`idtime`,
                `tbjogos`.`time_a`,
                `tbjogos`.`time_b`,
                `tbjogos`.`gols_a`,
                `tbjogos`.`gols_b`) AS `status`
    FROM
        (`tbtimes`
        JOIN `tbjogos`)
    WHERE
        ((`tbtimes`.`idtime` = `tbjogos`.`time_a`)
            OR (`tbtimes`.`idtime` = `tbjogos`.`time_b`))
    ORDER BY `tbtimes`.`idtime`


resultado:
CDMI	Remo	CDMI	1	1	e
CDMI	Paysandu	CDMI	1	4	v
Paysandu	Paysandu	CDMI	1	4	d
Paysandu	Remo	Paysandu	2	0	d
Remo	Remo	CDMI	1	1	e
Remo	Remo	Paysandu	2	0	v

Finalmente, para ver a posição de cada time, usei o view vw_posição

CREATE 
    ALGORITHM = UNDEFINED 
    DEFINER = `root`@`localhost` 
    SQL SECURITY DEFINER
VIEW `vw_posicao` AS
    SELECT 
        `vw_placar`.`idtime` AS `idtime`,
        COUNT(`vw_placar`.`idtime`) AS `jogos`,
        SUM(IF((`vw_placar`.`status` = 'v'), 1, 0)) AS `vitoria`,
        SUM(IF((`vw_placar`.`status` = 'd'), 1, 0)) AS `derrota`,
        SUM(IF((`vw_placar`.`status` = 'e'), 1, 0)) AS `empate`
    FROM
        `vw_placar`
    GROUP BY `vw_placar`.`idtime`

resultado:
CDMI	2	1	0	1
Paysandu	2	0	2	0
Remo	2	1	0	1

Ao invés de fazer update de uma tabela eu achei melhor fazer um view.

Esqueci, para tudo isso funcionar, eu precisei criar a função posição:

 

CREATE DEFINER=`root`@`localhost` FUNCTION `posicao`(itime varchar(45), time_a varchar(45), time_b varchar(45), gols_a int, gols_b int) RETURNS char(1) CHARSET utf8mb3 COLLATE utf8_swedish_ci
BEGIN
if gols_a = gols_b then return 'e';
	elseif gols_a > gols_b and itime = time_a then return 'v';
    elseif gols_a > gols_b and itime = time_b then return 'd';
    elseif gols_a < gols_b and itime = time_a then return 'd';
    elseif gols_a < gols_b and itime = time_b then return 'v';
end if;
END

 

tbjogos.png

tbtimes.png

vw_placar.png

vw_posicao.png

Editado por Frank K Hosaka
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,5k
×
×
  • Criar Novo...