-
Total de itens
3.089 -
Registro em
-
Última visita
Tudo que Denis Courcy postou
-
Seria mais ou menos assim: Onde test é o nome do meu banco de testes. DELIMITER $$; DROP PROCEDURE IF EXISTS `test`.`Grava`$$ CREATE DEFINER=`root`@`localhost` PROCEDURE `Grava`(pN_BOP integer, pID_AG_INF integer) BEGIN INSERT INTO RL_OCORRENCIA_AG_INFRATOR (N_BOP, ID_AG_INF) VALUES (pN_BOP, pID_AG_INF); END$$ DELIMITER;$$ para chamar a SP useCALL Grava(<variavel com valor de N_BOP>, <variavel com valor de ID_AG_INF>);
-
Ficaria parecido com o exemplo abaixo: CREATE TRIGGER add_matricula_turma AFTER INSERT ON aluno FOR EACH ROW BEGIN INSERT INTO turma (matricula) values (NEW.matricula); INSERT INTO boletim (matricula) VALUES (new.matricula); END;Não tente fazer pois vai dar erro de constraint. Sempre é necessário usar constraints se você quer um modelo de dados que funcione e respeite as regras do seu negócio. O uso de triggers serve,também para reforçar uma regra de negócio. ou seja para ser usado como uma constraint. Por exemplo, imagine uma regra de negócio em que um nome fosse obrigatório. você poderia criar uma trigger do tipo BEFORE INSERT para verificar se o campo nome foi preenchido e, se não foi, rejeitar a gravação do registro.
-
Oi, 'edersonnves'! Esclarecendo suas dúvidas, temos: Na tabela AGENTE_INFRATOR, a chave primária deveria ser somente ID_AG_INF Sim. Um relacionamento muitos para muitos sempre gera uma terceira tabela, pois no modelo físico só conseguimos representar o relacionamento 1:N. Então, com a terceira tabela teríamos 1:N N:1, que é igual a M:N(muitos para muitos). Eu não colocaria o atributo NOME_AG_INF na tabela PODE_TER e trocaria o nome dela para algo mais prático e de fácil documentação, tal como RL_OCORRENCIA_AG_INFRATOR. O RL é uma abreviação para RELACIONAMENTO. Sim. Dependendo do modelo que você está criando. seria mais ou menos assim:CREATE RL_OCORRENCIA_AG_INFRATOR ( N_BOP <o tipo do dado igual a tabela BOL_OCORRENCIA>, ID_AG_INF <o tipo do dado igual a tabela AGENTE_INFRATOR>, PRIMARY KEY (N_BOP, ID_AG_INF), CONSTRAINT FK_RL_OCOR_AG_INFRATOR_001 FOREIGN KEY (N_BOP) REFERENCES BOL_OCORRENCIA (N_BOP) ON DELETE NO ACTION ON UPDATE NO ACTION, CONSTRAINT FK_RL_OCOR_AG_INFRATOR_002 FOREIGN KEY (ID_AG_INF ) REFERENCES AGENTE_INFRATOR (ID_AG_INF ) ON DELETE NO ACTION ON UPDATE NO ACTION, ); Eu usaria uma Storage procedure que seria disparada em meu programa após a inserção dos dados da ocorrencia e do agente infrator.
-
Oi, Felipe está na hora de você procurar e baixar alguns tutoriais sobre SQl. Triggers são uma coisa e CONSTRAINTS são outra. Trigges seguem regras que estão muito bem documentadas no manual do MySQL de sua Versão. No seu caso basta uma trigger AFTER INSERT ON aluno. Se tentar colocar mais de um trigger com esta referência para esta tabela, você obterá erro. Outra coisa. a não ser que você queira colocar explicitamente um valor fixo em uma tabela, aprenda a trabalhar com OLD e NEW, operadores que informam se irão utilizar os valores novos (os que estão sendo gravados na tabela) ou se vão usar os valores antigos (os que já estavam gravados na tabela).
-
Luiz, A resposta desta query será uma coluna com o valor do status e outra coluna com a quantidade encontrada. Algo parecido com isto: statusParticipacaoPre total 0 4 1 6 2 3 4 2 etc.
-
Oi,'Luizzzzzzzzzzzzzzzz' Você já tentou fazer assim? SELECT a.statusParticipacaoPre, count(DISTINCT a.codParticipacaoPre) AS total FROM participacaopre a Inner Join vinculo b ON a.matriculaAluno = b.matriculaVinculo Inner Join turma c ON b.turmaVinculo = c.codigoTurma Inner Join curso d ON c.codCurso = d.codCurso inner join eventopre e ON a.codEventoPre = e.codEventoPre WHERE <sua-condição> GROUP BY a.statusParticipacaoPre";
-
Oi, 'arthurgregorio' ! INNER JOIN e o que você quer fazer tem tudo haver com lógica relacional. (6º ano fundamental) (1ºano ensino médio). Em seu exemplo temos o relacionamento entre uma sopa e os legumes que compõem a sopa. Seguindo seu exemplo teremos: SELECT t1.sopa, t2.nome_legume FROM tabela_1 t1 INNER JOIN tabela_2 t2 ON t1.ID_legume = t2.ID_legume;
-
Oi Felipe, As inserções são independentes. dependendo do modelo de dados que você criou você pode inserir automaticamente uma matricula em uma outra tabela usando trigger. Mas isto já é outro tópico.
-
'felipebath' Verifique se em uma tabela você declarou o campo como int unsigned e em outra tabela você declarou o mesmo campo como int apenas. Eu já tinha visto o erro. Preste sempre muita atenção quando for ligar duas tabelas. os campos em ambas as tabelas devem ser exatamente iguais no tipo e no tamanho, não no nome. Por padrão, salvo em raras exceções, eu sempre declaro tudo igual. até o nome.
-
'felipebath' , Coloque somente um ponto e virgula por instrução SQL. Detectei vários ponto e virgulas em suas instruções SQL. CONSTRAINT fk_disc_01 FOREIGN KEY ( id_disciplina ) REFERENCES disciplina( id_disciplina ); O ponto e virgula deveria estar somente ao final da instrução CREATE. Substitua por virgulas se existirem instruções após a linha com erro ou não deixe nada se não houver mais instruções.
-
'felipebath' Outra dica: Coloque nomes claros, que representem de forma óbvia o que você espera do campo. Exemplo: você usou create table boletim ( matricula int not null, id_disciplina int not null, id_turma int not null, v1 double(6,2) null, vt double(6,2) null, v2 double(6,2) null, ms double(6,2) null, vs double(6,2) null, mf double(6,2) null, ... Use nomes como AVALIACAO_1, etc. Evite colocar campos calculados, tais como MEDIA, MEDIA_FINAL, etc. Estes campos podem ser calculados facilmente em qualquer consulta SQL e não tem a necessidade de estarem permanentemente no banco de dados.
-
Oi, 'felipebath' observe o código CONSTRAINT id_disciplina FOREIGN O nome do índice id_disciplina está conflitando com o nome do campo id_disciplina. O nome do índice deve ser único em todo o banco e o nome do campo deve ser único na tabela. Como dica para criação de nome de índice, use o nome da duas letras para identificar o tipo do índicie, seguido do nome da tabela, seguido de um sequencial numérico. Exemplo: create table turma ( id_turma int unsigned not null, matricula int not null, id_disciplina int not null, CONSTRAINT FK_turma_001 FOREIGN KEY (id_disciplina) REFERENCES disciplina (id_disciplina), CONSTRAINT FK_turma_002 FOREIGN KEY (matricula) REFERENCES aluno (matricula), PRIMARY KEY (id_turma) ) ENGINE=InnoDB;
-
Oi, 'felipebath', Verifique o índice primário em aluno (primary key (id_aluno)) E veja o que você está fazendo em turma CONSTRAINT matricula FOREIGN KEY (matricula) REFERENCES aluno (matricula); Não vai funcionar nunca. A pergunta que não quer calar. Para que serve id_aluno se a referência básica é matrícula?
-
Oi, 'felipebath' Esqueci um ponto. Troque DECIMAL por DOUBLE. O primeiro está ultrapassado e dá erro, algumas vezes (para a versão que você usa). A não ser que haja necessidade extrema, troque de CHAR para VARCHAR nas strings grandes para nome e situacao.
-
Oi, 'Carlos Rocha'! Desculpe a demora na resposta. Nem sempre é fácil encontrar uma solução quando estamos atarefados. Há duas formas de buscar o que você quer. Uma delas você usará o LIKE e na outra você usará índices fulltext. Inicialmente vou colocar uma SQL com a pesquisa pelo LIKE. A vantagem desta pesquisa é a simplicidade a desvantagem é que sempre será executada em TABLE SCAN. Um outro ponto é que não estou conseguindo identificar de podemos usar um join para realizarmos uma única consulta. Partindo do princípio que não há uma ligação entre as tabelas, então serão três SQLs e você deverá tratar os resultados via programa. Seria assim: SELECT SQL_CALC_FOUND_ROWS nome FROM anunciantes WHERE nome LIKE "%<sua-variável>%"; Antes de realizar a consulta com a próxima tabela armazene o resultado da consulta abaixo em uma variável.SELECT FOUND_ROWS();Esta segunda consulta retorna o número de linhas que a primeira consulta gerou. Agora, de modo semelhante faça as outras 4 consultas. Se o resultado das tres variáveis contadoras de linha for diferente de 0 (em cada uma), então você pode prosseguir com seu plano. Veja este link sobre SQL_CALC_FOUND_ROWS
-
Oi, 'felipebath' ENGINE=InnoDB Sim. FKs são indices. Para a criação de Fks use: CONSTRAINT <nome-do-indice> FOREIGN KEY (<campo-desta-tabela>) REFERENCES <tabela-alvo> (<campo-da-tabela-alvo>);
-
Oi, 'felipebath' Como você está usando TYPE na declaração do engine InnoDB, presumo que a versão do seu MySQL é inferior a 5.x. Consequentemente, não vai funcionar a constraint de foreign key que só foi implementada após a versão 5. Quanto a sua pergunda sobre É um índice. uma forma rápida de ordenar e achar o que se quer por uma chave (um po mais campos separados por vírgula) Como já falei antes em outro post hoje, não use AUTO_INCREMENT com int. Use int unsigned, pois o AUTO_INCREMENT é para número inteiro positivo e você não precisará do byte de sinal.
-
Oi, 'felipebath' Veja este pdf em anexo. Ele contém o basicão das informações que você necessita. Escola.pdf
-
[quote name='Vinicius F.' Retire esta linha KEY `FK_cc` (`centro`,`id_div`), e esta linha KEY `FK_tpl` (`id_tipo`), Voce está tentendo criar a constraint que é um iindice, mas antes disso está criando outro índice com o mesmo nome.
-
Oi, 'KaitoO' Vamos analisar suas tabelas assim: Primeiro Se você diz: Presumo que também haja varios usuários selecionando o mesmo ap. Sendo assim, a ligação correta é de muitos aps para muitos usuários, e você fez a ligação de um ap para vários usuários. Segundo, o nome do ap é do ap. Deve estar na tabela de ap. Do jeito que você colocou haverá o nome de um único ap em vários usuários. Terceiro, depois que você corrigir seu banco transferirei o tópico de volta a PHP pata esclarecer sua última dúvida. Quarto, Campos auto_increment são positivos, ou seja >= 0, por isso altere os campos para int(10) unsigned not null. Vai economizar 1 byte por campo/registro. Parece pouco mas, se você tiver 1 milhão de registros serão 1MB a menos.
-
Oi, 'Rudimar' Acho que j[á falei disso em outro post para você. O MySQL não está entendendo esta condição folha_adiant_dec_terceiro.ano_mes_decimo = '" . $ano_mes . "' and (" .$sql2 . ")";O que você quer comparar aqui? (" .$sql2 . ")
-
(Resolvido) Funcao que retorna linhas de uma pesquisa
pergunta respondeu ao ClaudioX de Denis Courcy em MySQL
Crie sua consulta usando a cláusula SQL_CALC_FOUND_ROWS, assim: SELECT SQL_CALC_FOUND_ROWS campo1, campo2 FROM tabela WHERE <condicao>; Para saber o número de linhas retornadas use o SQL abaixo:select FOUND_ROWS(); -
Oi, 'Penny Lane', Onde você declarou "@codmat2" ?
-
Oi, 'Penny Lane' Poderia por favor ser mais objetiva. Estou com a mente um tanto bagunçada a esta hora e não estou entendendo o que você quer.
-
movendo MySQL -->> PHP