Ir para conteúdo
Fórum Script Brasil

Denis Courcy

Moderadores
  • Total de itens

    3.089
  • Registro em

  • Última visita

Tudo que Denis Courcy postou

  1. Post na área errada. Transferindo para a área de PHP.
  2. Denis Courcy

    Erro em Consulta

    Oi, 'ronado.melo' Tente: select DISTINCT max(v.id) as id1, p.nome from usuarios_produtos_visitados v join usuarios u on (u.id = v.id_usuarios) join produtos p on (p.id = v.id_produtos) group by p.nome order by id1 desc
  3. Oi, 'Lafey' Você está errando na normalização destas tabelas além de estar errando na ligação de foreign key entre elas. Faça assim: CREATE TABLE `tb_estados` ( `idestados` int(2) unsigned zerofill NOT NULL auto_increment, `uf` varchar(10) NOT NULL default '', `nome` varchar(20) NOT NULL default '', PRIMARY KEY (`idestados`) ) ENGINE=InnoDB AUTO_INCREMENT=28 DEFAULT CHARSET=latin1 AUTO_INCREMENT=28; CREATE TABLE `tb_cidades` ( `idcidades` int(4) unsigned zerofill NOT NULL auto_increment, `idestados` int(2) unsigned zerofill NOT NULL default '00', `nome` varchar(50) NOT NULL default '', PRIMARY KEY (`idcidades`), foreign key (idestados) references tb_estados(idestados) on delete cascade on update no action ) ENGINE=InnoDB AUTO_INCREMENT=9715 DEFAULT CHARSET=latin1 AUTO_INCREMENT=9715; create table if not exists tb_condutores( idcondutores int(10) unsigned zerofill not null auto_increment, nome_completo varchar(80) not null, endereco varchar(100) not null, cep varchar(10) not null, cpf varchar(15) not null unique, rg varchar(13) not null unique, data_nascimento date not null, `idcidades` int(4) unsigned zerofill NOT NULL DEFAULT '0000', primary key(idcondutores), foreign key (idcidades) references tb_cidades(idcidades) on delete cascade on update no action )Engine = InnoDB; 1) Você só pode ligar uma tabela pai a uma tabela fila depois que a tabela filha foi criada. ou seja crie primeiro as tabelas filhas e depois a tabela pai. 2) A ligação entre a tabela filha e a tabela pai é através da chave primária da tabela filha e não através de um campo qualquer. 3) Evide usar campos caracter para ligação entre tabelas.
  4. Denis Courcy

    JOIN

    Oi,'Samir' Pelo que analisei você está tentando comparar tijolo com pipoca e laranja. ou seja não há relação entre as tabelas que você forneceu. Meu entendimento mostra que a TtabelaA deveria possuir os atributos idcor e idemail para representar os identificadores de cor (TabelaB) e email (TabelaC) respectivamente. Se a TabelaA possuir estes atributos então você poderá fazer relacionamento entre as três tabelas.
  5. 'Marcos P. Fontana' Acrescente a instrução NOT NULL DEFAULT 0 em cada um dos elementos de relacionamento na tabela pedido.
  6. Denis Courcy

    Banco de Dados

    'Josinelson' Não está normalizado. A tabela produtos deveria conter o código da categoria e o código da unidade e não os seus descritivos.
  7. Como sua pergunta está muito mais relacionada a construção de página/sistema vou transferir este tópico para a área de PHP. Movendo MySQL -->> PHP
  8. Não muito. Dependerá do tamanho da tabela (qtd de registros). Crie um índice por VALIDADE e SITUAÇÃO para otimização da busca e o impacto será menor ainda.
  9. Oi, 'BetoGroo' A linha 25 de sua procedure update mandado set id_situacao = 2; modifica o atributo id_situação de TODAS as linhas da tabela mandado. Você não precisa desta procedure para executar esta operação. A instrução:UPDATE mandado SET id_situacao = 2 WHERE validade < CURDATE(); é suficiente para executar o que você deseja. Porém, se seu desejo é usar uma procedure, então você deve corrigir sua procedure para que fique assim:DELIMITER $$ USE delpol $$ CREATE PROCEDURE datamp() BEGIN DECLARE done int default 0; DECLARE vencimento date; DECLARE m_protocolo integer; DECLARE cursor_mp CURSOR FOR SELECT protocolo, validade FROM mandado; DECLARE CONTINUE HANDLER FOR NOT FOUND SET = 1; OPEN cursor_mp; loop_mp: LOOP FETCH cursor_mp INTO m_protocolo, vencimento; IF done = 1 THEN LEAVE loop_mp; END IF; IF vencimento < CURDATE() THEN UPDATE mandado SET id_situacao = 2 WHERE protocolo = m_protocolo; END IF; END LOOP loop_mp; END $$ Para lembrar a primeira instrução que passei é muito mais rápida que a storage procedure.
  10. Oi, 'Ronnie Luiz'! Você vai precisar montar uma pivot table para obter este resultado. Uma select simples para o primeiro resultado seria: SELECT cd.id_Cons_Equip, ct.descricao, SUM(cd.qtde_consumo) FROM consumo.consumo_desc cd INNER JOIN consumo.consumo_tipo ct ON ct.id_sup = cd.id_sup GROUP BY cd.id_Cons_Equip, ct.descricao; Mas este não virá do jeito que você quer. Criando esta storage procedure:DELIMITER $$; DROP PROCEDURE IF EXISTS `dmsase`.`pivotwizard`$$ CREATE DEFINER=`root`@`Localhost` PROCEDURE `pivotwizard`( IN P_Row_Field VARCHAR(255), IN P_Column_Field VARCHAR(255), IN P_Value VARCHAR(255), IN P_From VARCHAR(4000), IN P_Where VARCHAR(4000)) BEGIN DECLARE done INT DEFAULT 0; DECLARE M_Count_Columns int DEFAULT 0; DECLARE M_Column_Field varchar(60); DECLARE M_Columns VARCHAR(8000) DEFAULT ''; DECLARE M_sqltext VARCHAR(8000); DECLARE M_stmt VARCHAR(8000); DECLARE cur1 CURSOR FOR SELECT CAST(Column_Field AS CHAR) FROM Temp; DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1; DROP TABLE IF EXISTS Temp; SET @M_sqltext = CONCAT('CREATE TEMPORARY TABLE Temp ', ' SELECT DISTINCT ',P_Column_Field, ' AS Column_Field', ' FROM ',P_From, ' WHERE ',P_Where, ' ORDER BY ', P_Column_Field); PREPARE M_stmt FROM @M_sqltext; EXECUTE M_stmt; SELECT COUNT(*) INTO M_Count_Columns FROM Temp WHERE Column_Field IS NOT NULL; IF (M_Count_Columns > 0) THEN OPEN cur1; REPEAT FETCH cur1 INTO M_Column_Field; IF (NOT done) and (M_Column_Field IS NOT NULL) THEN SET M_Columns = CONCAT(M_Columns, ' SUM( CASE WHEN ',P_Column_Field,'=''',M_Column_Field,'''', ' THEN ',P_Value, ' ELSE 0 END) AS `', M_Column_Field ,'`,'); END IF; UNTIL done END REPEAT; SET M_Columns = Left(M_Columns,Length(M_Columns)-1); SET @M_sqltext = CONCAT('SELECT ',P_Row_Field,',',M_Columns, ' FROM ', P_From, ' WHERE ', P_Where, ' GROUP BY ', P_Row_Field, ' ORDER BY ', P_Row_Field); PREPARE M_stmt FROM @M_sqltext; EXECUTE M_stmt; END IF; DEALLOCATE PREPARE stmt; END$$ DELIMITER;$$ E passando os parâmetros certos (os parametros da consulta simples acima), teremos:CALL pivotwizard('cd.id_Cons_Equip','ct.descricao','cd.qtde_consumo','consumo_desc cd INNER JOIN consumo_tipo ct ON ct.id_sup = cd.id_sup', '1=1'); O resultado é o que você queria no primeiro exemplo dado no post anterior. Para responder ao segundo exemplo eu preciso de mais dados. Estão faltando tabelas no modelo que você passou?
  11. Oi, 'Ronnie Luiz' A salada que você fez no select é muito grande e não dá para decifrar rápido. Qual o resultado que você quer?
  12. Denis Courcy

    SQL count

    Oi, 'j1a4l0' Faz assim: SELECT e.id AS idevento, e.nome AS evento, count(d.id) AS qtd_documentos FROM eventos e INNER JOIN documentos d ON d.id = e.evento;
  13. Oi, 'Matheus Shake' ! Use um destes: select round(13456.635, 0); select truncate(13456.635, 0); O primeiro te dará o resultado 13457 e o segundo te dará o resultado 13456.
  14. Denis Courcy

    saldo anterior

    Pode, por favor, fazer o que te pedi aqui?
  15. Denis Courcy

    saldo anterior

    Oi, 'ajgemeos' Favor enviar a estrutura das tabelas. Estou com dificuldade de entender onde está a parte 1 de 1:N do relacionamento MOV x PRODUTO
  16. Denis Courcy

    saldo anterior

    Oi, 'ajgemeos' ! É possível fazer isso em SQL, sim. Mas você forneceu pouca informação para poder ser ajudado.
  17. Oi, 'Samir' Use SELECT DISTINCT desta forma: SELECT DISTINCT tb1.indice, tb1.nome, tb2.email FROM tb1 INNER JOIN tb2 ON tb2.indice = tb1.indice GROUP BY tb1.indice
  18. Pelo que você relatou a máquina não está travada. ela está processando sequencialmente os registros, ou seja, fazendo um tabe scan, Para resolver e otimizar seu processo verifique as questões abaixo. Existe uma chave em registro54 com todos estes atributos (NUMERO, CNPJ, SERIE, MODELO, CFOP, ALIQUOTA)? Se não existe crie uma. Existe chave em registro50 para este atributo (id_arquivo)? Se não existe crie uma. Antes que pergunte "chave" é o mesmo que "indice".
  19. Este erro começou a aparecer com frequencia a partir da versão 5.0 do MySQL. Na verdade não é um erro mas um aviso. Impede que o MySQL seja acessado de outras máquinas. Somente a localhost consegue acessá-lo. Acontece também quando se instala em Windows Server, Windows XP acessado por rede, etc. Crie o usuário root com o host @% e dê todas as permissões a ele. Verifique se já existe um usuário root com o host % e se ele tem todas as permições. Ele deve existir e ter todas as permissões, também.
  20. Oi, 'CID_AGUIAR'! Vamos responder por partes. Para acrescentar dados na tblB (supondo que esta tabela tem os mesmos campos que a outra) vindos da tblA. faça:INSERT INTO tblB(Nota, qntitens e ValorItem) SELECT Nota, qntitens e ValorItem FROM tblA Faça assim:SELECT Nota, qntitens e ValorItem FROM tblB Faça assim:SELECT nota, SUM(qntitens) AS qntitens, SUM(ValorItem) AS ValorItem FROM tblB GROUP BY nota
  21. Denis Courcy

    Erro instalação MySql

    Solução simples se você estiver usando Windows XP. Desinstale novamente o MySQL. siga as instruções deste link: Como remover serviços no Windows XP reinstale o MySQL.
  22. Oi, 'Jobless' Que linguagem de programação você usa?
  23. primeiro porque o engine que você utilizou é o MyISAM. Chave estrangeira só funciona no engine InnoDB. Segundo porque a declaração `gruposusuario_id` int(11) NOT NULL, na tabela usuário não possui um valor default.
  24. Oi, 'WebDevPT' ! O MySQL possui diversas funções que poderão te ajudar a resolver este problema. Leia a seção 6.3 do manual do mysql vesão 4.1 em portugues, para mais detalhes sobre estas funções)
×
×
  • Criar Novo...