Ir para conteúdo
Fórum Script Brasil

BetoGroo

Membros
  • Total de itens

    43
  • Registro em

  • Última visita

Tudo que BetoGroo postou

  1. Olá a todos! Quando desenvolvemos uma aplicação para DESKTOP, sabemos que podemos "balancear" a programação entre o banco de dados, e a aplicação, a fim de ganharmos desempenho. Por exemplo uma aplicação em Delphi que rode em uma rede, e que alguns computadores sejam mais fracos, é vantajoso deixar o Banco de Dados em um terminal mais potente, e deixar que o SGBD faça muitas transações. Já no PHP, por exemplo, em que tanto o SGBD, quanto o programa roda no servidor, tem alguma vantagem distribuir as transações? Por exemplo usar stored procedures, triggers, etc? Um abraço!
  2. Ah, entendi! Muito obrigado, resolvido o problema! Muito obrigado!
  3. Muito obrigado Denis. Estes índices foram criados pelo MySQL Worchbench. Eu preciso estudar um pouco mais sobre índices. Apesar que, mesmo sem deletá-los deu certo. Eu apenas setei o valor default = 0 no atributo id_tem e a TRIGGER foi disparada! É necessário mesmo deletá-los??
  4. Tá "na mão": CREATE TABLE IF NOT EXISTS `delpol`.`telefone` ( `id_tel` INT UNSIGNED NOT NULL , `rl_id_func` INT UNSIGNED NOT NULL , `rl_id_tipo_tel` INT UNSIGNED NOT NULL , `numero_tel` CHAR(9) NOT NULL , `ddd_tel` CHAR(2) NOT NULL , PRIMARY KEY (`id_tel`, `rl_id_func`) , INDEX telefone_FKIndex1 (`rl_id_tipo_tel` ASC) , INDEX telefone_FKIndex2 (`rl_id_func` ASC) , CONSTRAINT `tel_tipo_tel` FOREIGN KEY (`rl_id_tipo_tel` ) REFERENCES `delpol`.`tipo_telefone` (`id_tipo_tel` ), CONSTRAINT `func_tele` FOREIGN KEY (`rl_id_func` ) REFERENCES `delpol`.`funcionario` (`id_func` )) ENGINE = InnoDB DEFAULT CHARACTER SET = utf8 COLLATE = utf8_bin PACK_KEYS = 0 ROW_FORMAT = DEFAULT
  5. Então vamos lá: Tenho a procedure: CREATE PROCEDURE `delpol`.`ADD_func2` ( IN rlIdDele INTEGER, IN rlIdCargo INTEGER, IN nomeFunc VARCHAR(50), IN nasctoFunc DATE, #tb funcionario IN numeroTel VARCHAR(9), IN dddTel CHAR(2) #tb telefone ) BEGIN INSERT INTO funcionario (rl_id_dele, rl_id_cargo, nome_func, nascto_func) VALUES(rlIdDele, rlIdCargo, nomeFunc, nasctoFunc); SELECT DISTINCT LAST_INSERT_ID() INTO @rlIdFunc FROM funcionario; INSERT INTO telefone (rl_id_func, rl_id_tipo_tel, numero_tel, ddd_tel) VALUES (@rlIdFunc, 1, numeroTel, dddTel); END// e a TRIGGER: DELIMITER // CREATE TRIGGER `delpol`.`TR_INCREMENTA_id_tel` BEFORE INSERT ON `delpol`.`telefone` FOR EACH ROW BEGIN DECLARE num INTEGER; SET num = (SELECT MAX(id_tel) FROM telefone WHERE rl_id_func = NEW.rl_id_func); IF (num <= 0) OR (num IS NULL) THEN SET num = 1; ELSE SET num = num + 1; END IF; SET NEW.id_tel = num; END // Quando chamo a procedure: CALL ADD_func2 (1,1,'BETOGROO','1979-05-13','9999-2222','16') Da o seguinte erro: #1364 - Field 'id_tel' doesn't have a default value Porém, se eu executar a query abaixo: INSERT INTO funcionario (rl_id_dele, rl_id_cargo, nome_func, nascto_func) VALUES(1, 1, 'BETOGROO', '1979-05-13'); SELECT DISTINCT LAST_INSERT_ID() INTO @rlIdFunc FROM funcionario; INSERT INTO telefone (rl_id_func, rl_id_tipo_tel, numero_tel, ddd_tel) VALUES (@rlIdFunc, 1, '9999-2222', '16'); Não dá erro algum, e insere os dados normalmente nas tabelas! O que está acontecendo??? Obs: Estas são as tabelas:
  6. Só uma dúvida: Uma TRIGGER reconhece um INSERT oriundo de uma PROCEDURE?
  7. Olá! Gostaria de saber se tem uma maneira de eu executar vários inserts, porém, para ser concuído, TODOS tem que ser executados. Se UM der problema, nenhum será executado! Eu pensei em uma Stored Procedure. Será que resolveria meu problema???
  8. Este POST pode te ajudar!
  9. Olá! Tenho as seguintes tabelas relacionadas: Com este script que eu criei, funciona normalmente: <?php require_once 'conn.php'; $nome = $_POST['nome']; $nascto_func = $_POST['nascto_func']; $delegacia = $_POST['delegacia']; $cargo = $_POST['cargo']; $logradouro_end = $_POST['logradouro_end']; $numero_end = $_POST['numero_end']; $bairro_end = $_POST['bairro_end']; $cep_end = $_POST['cep_end']; $comp_end = $_POST['comp_end']; $ddd_tel = $_POST['ddd_tel']; $numero_tel = $_POST['numero_tel']; if ((!isset($_POST['ddd_cel'])) || (!isset($_POST['numero_cel']))){ $ddd_cel = NULL; $numero_cel = NULL; }else{ $ddd_cel = $_POST['ddd_cel']; $numero_cel = $_POST['numero_cel']; } $sql = "INSERT INTO funcionario (rl_id_dele, rl_id_cargo, nome_func, nascto_func) "; $sql .= "VALUES ($delegacia, $cargo, '$nome', '$nascto_func') "; echo "<br>$sql";//apenas para testar a consulta if(mysql_query($sql)){ echo " - Certo"; }else{ echo " - Errado"; } $sql = "SELECT max(id_func) FROM funcionario "; echo "<br>$sql<br>";//apenas para testar a consulta $rl_id_func = mysql_result(mysql_query($sql),0);//maior id de funcionario cadastrado $sql = "INSERT INTO telefone (rl_id_func, rl_id_tipo_tel, numero_tel, ddd_tel) "; $sql .= "VALUES ($rl_id_func, 1, '$numero_tel', '$ddd_tel') ";// 1 é sempre telefone fixo if(($ddd_cel != null) ||($numero_cel != null)){ $sql .= ",($rl_id_func, 2, '$numero_cel', '$ddd_cel') "; // 2 é sempre telefone celular } echo "<br><br>$sql<br><br>"; //apenas para testar a consulta if (mysql_query($sql)) { echo "- Certo"; }else{ echo "- Errado"; } $sql = "INSERT INTO endereco (logradouro_end, numero_end, bairro_end, cep_end, comp_end) "; $sql .= "VALUES ('$logradouro_end', '$numero_end', '$bairro_end', '$cep_end', '$comp_end') "; echo "<br><br>$sql<br><br>"; if (mysql_query($sql)) { echo "- Certo"; }else{ echo "- Errado"; } $sql = "SELECT MAX(id_end) FROM endereco "; $funcionario_id_end = mysql_result(mysql_query($sql),0); //maior id de telefone cadastrado echo "<br><br>$funcionario_id_end";//apenas para testar a consulta $sql = "CALL ADD_func_end($rl_id_func, $funcionario_id_end)"; //chama a procedure que insere em tabela N:M echo"<br><br>$sql"; if (mysql_query($sql)) { echo "- Certo"; }else{ echo "- Errado"; } ?> Porém, gostaria de saber se fiz certo, ou se teria alguma maneira mais fácil de fazê-lo. Lembrando que o id_tel é inserido através de uma TRIGGER, e os dois campos da tabela RL_funcionario_endereco através de uma procedure! Um abraço!
  10. Muito bom! Posso usar o mesmo esquema para inserir dados em várias tabelas ao mesmo tempo? Por exemplo nas tabelas: Como faria para inserir dados em todas as tabelas, respeitando a integridade, e tudo em uma unica query? Um abraço!
  11. Olá! Tenho as seguintes tabelas relacionadas: Gostaria de saber de que maneira inserir os dados na tabela funcionario_has_endereco. Vi alguma coisano fórum sobre Stored Procedures, mas não entendi muito bem! Um abraço a todos!
  12. Caro Denis Novamente você me tirou de um problemão! Muito obrigado pela ajuda, e parabéns pela matéria! Porém eu acho que tem uma coisinha errada lá: Set numero = (select max(ID_Pedido) From Item_Pedido where ID_Pedido = new.ID_Pedido); Não deveria ser assim? Set numero = (select max(IT_Pedido) From Item_Pedido where ID_Pedido = new.ID_Pedido); Um abraço!
  13. Referente ao banco abaixo, tabela telefone, tenho algumas dúvidas. Qual é a melhor maneira obter um "auto-increment" do campo id_tel? Seria deixá-lo como auto-increment? Ou o ideal seria criar uma função na minha aplicação que pegasse o ultimo registro, e cadastrasse com o número posterior? Ou teria alguma solução melhor? Um abraço, e obrigado!
  14. Bom, achei o problema! Ele se chama falta de atenção. Faltou o "group by " no final da instrução: SELECT f.nome_func AS NOME, c.nome_cargo AS CARGO, d.nome_dele AS DELEGACIA, TRIM(GROUP_CONCAT(IF(tt.nome_tipo_tel = "FIXO", t.numero_tel, "") SEPARATOR "")) AS FIXO, TRIM(GROUP_CONCAT(IF(tt.nome_tipo_tel = "CELULAR", t.numero_tel, "") SEPARATOR "")) AS CELULAR FROM funcionario f INNER JOIN cargo c ON c.id_cargo = f.rl_id_cargo INNER JOIN delegacia d ON d.id_dele = f.rl_id_dele INNER JOIN telefone t ON f.id_func = t.rl_id_func INNER JOIN tipo_telefone tt ON tt.id_tipo_tel = t.rl_id_tipo_tel GROUP BY NOME Então está resolvido! Se alguém tiver dicas de bons livros sobre modelagem de dados, me de um toque! Abraço a todos e obrigado!
  15. Valeu, deu certo! Porém me deparei com outro problema! Aumentei algumas tabelas em meu banco, que ficou com esta estrutura: E tentei esta consulta, baseada na explicação do Denis Courcy. SELECT f.nome_func AS NOME, c.nome_cargo AS CARGO, d.nome_dele AS DELEGACIA, TRIM(GROUP_CONCAT(IF(tt.nome_tipo_tel = "FIXO", t.numero_tel, "") SEPARATOR "")) AS FIXO, TRIM(GROUP_CONCAT(IF(tt.nome_tipo_tel = "CELULAR", t.numero_tel, "") SEPARATOR "")) AS CELULAR FROM funcionario f INNER JOIN cargo c ON c.id_cargo = f.rl_id_cargo INNER JOIN delegacia d ON d.id_dele = f.rl_id_dele INNER JOIN telefone t ON f.id_func = t.rl_id_func INNER JOIN tipo_telefone tt ON tt.id_tipo_tel = t.rl_id_tipo_tel Porém me retorna apenas uma linha, com todos os fixos e celulares cadastrados em apens uma linha! Onde está meu erro na consulta? Aproveitando, alguém indica um bom livro de Modelagem de Dados"? Muito obrigado!
  16. Da maneira como respondido, a consulta tem o seguinte resultado: NOMEFIXOCELULARADALBERTO TORRES3333-3333 ADALBERTO TORRES 9999-2222GERORGINA NAVARRO3333-4444 JULIO CÉSAR 9999-9999TEO MAIA3333-2222 Repare que é criada duas linhas para o "ADALBERTO TORRES". Gostaria de saber se tem como retornar assim: nomeFIXOCELULARADALBERTO TORRES3333-33339999-222GIORGINA NAVARRO3333-4444 JULIO CESAR 9999-9999TEO MAIA3333-2222 Onde o "ADALBERTO TORRES" aparece com os dois telefones cadastrados, porém, na mesma linha! Um abraço, e muito obrigado!
  17. Muito obrigado! Deu tudo certo aqui! Agora posso continuar com meu projeto! Um abraço, e mais uma vez obrigado :rolleyes:
  18. Bom dia Tenho as seguintes tabelas relacionadas: Com a seguinte instrução: SELECT f.nome_func, t.numero_tel, tt.nome_tipo_tel FROM funcionario f, telefone t, tipo_telefone tt WHERE f.id_func = t.funcionario_id_func AND id_tipo_tel = tipo_telefone_id_tipo_tel ORDER BY f.nome_func LIMIT 0 , 30 Tenho o seguinte resultado: nome_funcnumero_telnome_tipo_telADALBERTO TORRES9999-2222CELULARADALBERTO TORRES3333-3333FIXOGIORGINA NAVARRO3333-4444FIXOJULIO CESAR9999-9999CELULARTEO MAIA3333-2222FIXO Gostaria que fosse exibido da seguinte maneira: nomeFIXOCELULARADALBERTO TORRES3333-33339999-222GIORGINA NAVARRO3333-4444 JULIO CESAR 9999-9999TEO MAIA3333-2222 Qual seria a instrução SQL, de modo que meus dados fosse exibidos, de acordo com esta tabela? Desculpe-me pela maneira que expus minha dúvida. Não encontrei palavras, então resolvi usar algo visual. Muito obrigado!
×
×
  • Criar Novo...