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. Sempre que vocês usarem campos AUTO_INCREMENT Em vez de usar cod_aces_carro INT NOT NULL AUTO_INCREMENT, como no exemplo acima, Use cod_aces_carro INT UNSIGNED NOT NULL AUTO_INCREMENT Motivo: Valor INT varia de -2147483648 a 2147483647. e o INT UNSIGNED varia de 0 a 4294967295. Como o campo auto_increment nunca é menor que ZERO, haverá um desperdício se não usar o tipo correto
  2. Denis Courcy

    Filtrar no Select

    Amadores. :angry: Tenta ai: SELECT grupoImgs, GROUP_CONCAT(foto) FROM tbl_index GROUP BY grupoImgs Estudem o manual do Mysql da versão que vocês usam. Tem um capítulo inteiro sobre funções.
  3. 'JRPETROLINA', Tenta rodar estas duas queries separadamente e verifique se o valor retornado é o mesmo. Se for, então ou a qualidade de seus dados está ruim ou esta pesquisa está com o pensamento errado e, por isso, não retornará dados com diferença. SELECT hb1.ID, MIN(hb1.`DH_MOVIMENTO`) AS 'HORA_INICIAL' FROM historico_bagagem hb1 GROUP BY hb1.ID SELECT hb2.ID, MAX(hb2.`DH_MOVIMENTO`) AS 'HORA_FINAL' FROM historico_bagagem hb2 GROUP BY hb2.ID;
  4. MyISAM é uma engine do Mysql que cria as tabelas em forma de arquivos. Isto evita que eu crie lixo em minha base que é InnoDB. Eu poderia ter usado a engine MEMORY que cria as tabelas em memória, já que o uso foi único, mas preferi assim para o caso de você ainda ter dúvidas e eu precisar recompor as tabelas e seus dados.
  5. 'JRPETROLINA' Peguei seus dados e reproduzi assim: CREATE DATABASE `JRPETROLINA`; USE `JRPETROLINA`; CREATE TABLE BAGAGEM( ID INT, NOME_PASSAGEIRO VARCHAR(60), PESO DOUBLE, caminho_ID INT )ENGINE=MYISAM; INSERT INTO BAGAGEM(ID, NOME_PASSAGEIRO) VALUES(1,'DIOGENES MORAES'),(2,'LEONARDO FERREIRA'),(3,'XXXXXXXXX'); CREATE TABLE CAMINHO( ID INT, DESCRICAO VARCHAR(50) )ENGINE = MYISAM; CREATE TABLE RADIO( ID INT, DESCRICAO VARCHAR(50), QUANT_RECEPTOR INT )ENGINE=MYISAM; CREATE TABLE RECEPTOR( ID INT, DESCRICAO VARCHAR(50), NUMERO_RECEPTOR INT, radio_ID INT )ENGINE=MYISAM; CREATE TABLE `LOCAL`( ID INT, DESCRICAO VARCHAR(50), TIPO_LOCAL INT, receptor_ID INT, radio_ID INT)ENGINE=MYISAM; INSERT INTO `LOCAL`(id,DESCRICAO) VALUES (1,'CHECK-IN NORTE'),(2,'ESTEIRA NORTE FIM'),(3,'RECOLHIMENTO NORTE') ,(4,'CARRO EMBARQUE NORTE'),(5,'CHECK-IN SUL'),(6,'ESTEIRA SUL INICIO') ,(7,'ESTEIRA SUL FIM'),(8,'RECOLHIMENTO SUL'),(9,'CARRO EMBARQUE SUL'); CREATE TABLE HISTORICO_BAGAGEM( ID INT, DH_MOVIMENTO DATETIME, local_ID INT, bagagem_ID INT)ENGINE=MYISAM; /*NOME_PASSAGEIRO LOCAL DATA_MOVIMENTO HORA_INICIAL HORA_FINAL TEMPO_TOTAL 1, 1,'2012-01-11 20:35:38.0','2012-01-11 20:35:40.0 2012-01-11 20:35:40.0 00:00:00 1, 1,'2012-01-11 20:36:01.0','2012-01-11 20:36:03.0 2012-01-11 20:36:03.0 00:00:00 1, 2,'2012-01-11 20:36:10.0','2012-01-11 20:36:10.0 2012-01-11 20:36:10.0 00:00:00 1, 3,'2012-01-11 20:36:23.0','2012-01-11 20:36:23.0 2012-01-11 20:36:23.0 00:00:00 1, 4,'2012-01-11 20:36:30.0','2012-01-11 20:36:30.0 2012-01-11 20:36:30.0 00:00:00 2, 5,'2012-01-11 21:23:15.0','2012-01-11 21:22:07.0 2012-01-11 21:22:07.0 00:00:00 2, 5,'2012-01-11 21:22:16.0','2012-01-11 21:22:16.0 2012-01-11 21:22:16.0 00:00:00 2, 6,'2012-01-11 21:22:27.0','2012-01-11 21:22:27.0 2012-01-11 21:22:27.0 00:00:00 2, 7,'2012-01-11 21:22:40.0','2012-01-11 21:22:40.0 2012-01-11 21:22:40.0 00:00:00 2, 8,'2012-01-11 21:23:03.0','2012-01-11 21:23:04.0 2012-01-11 21:23:04.0 00:00:00 2, 9,'2012-01-11 21:23:09.0','2012-01-11 21:23:10.0 2012-01-11 21:23:10.0 00:00:00*/ INSERT INTO HISTORICO_BAGAGEM(ID,bagagem_ID,local_ID,DH_MOV) VALUES (1,1,1,'2012-01-11 20:35:38.0'), (1,1,1,'2012-01-11 20:35:40.0'), (2,1,1,'2012-01-11 20:36:01.0'), (2,1,1,'2012-01-11 20:36:03.0'), (3,1,2,'2012-01-11 20:36:10.0'), (3,1,2,'2012-01-11 20:36:11.0'), (4,1,3,'2012-01-11 20:36:23.0'), (4,1,3,'2012-01-11 20:36:23.0'), (5,1,4,'2012-01-11 20:36:30.0'), (5,1,4,'2012-01-11 20:36:30.0'), (6,2,5,'2012-01-11 21:23:15.0'), (6,2,5,'2012-01-11 21:22:07.0'), (7,2,5,'2012-01-11 21:22:16.0'), (7,2,5,'2012-01-11 21:22:16.0'), (8,2,6,'2012-01-11 21:22:27.0'), (8,2,6,'2012-01-11 21:22:27.0'), (9,2,7,'2012-01-11 21:22:40.0'), (9,2,7,'2012-01-11 21:22:40.0'), (10,2,8,'2012-01-11 21:23:03.0'), (10,2,8,'2012-01-11 21:23:04.0'), (11,2,9,'2012-01-11 21:23:09.0'), (11,2,9,'2012-01-11 21:23:10.0'); SELECT b.nome_passageiro, l.descricao AS LOCAL, DATE(h.DH_MOVIMENTO) AS DATA_MOVIMENTO, h1.Hora_inicial, h2.Hora_final, TIMEDIFF(h2.Hora_final, h1.Hora_inicial) AS Tempo_Total -- Pode usar a função SUBTIME, também FROM historico_bagagem h INNER JOIN bagagem b ON b.`ID` = h.`BAGAGEM_ID` INNER JOIN LOCAL l ON l.id = h.local_id INNER JOIN ( SELECT hb1.id, MIN(hb1.`dh_movimento`) AS Hora_inicial FROM historico_bagagem hb1 GROUP BY hb1.id ) h1 ON h1.id = h.id INNER JOIN ( SELECT hb2.id, MAX(hb2.`dh_movimento`) AS Hora_final FROM historico_bagagem hb2 GROUP BY hb2.id ) h2 ON h2.id = h.id Obtive este resultado: "nome_passageiro" "LOCAL" "DATA_MOVIMENTO" "Hora_inicial" "Hora_final" "Tempo_Total" "DIOGENES MORAES" "CHECK-IN NORTE" "2012-01-11" "2012-01-11 20:35:38" "2012-01-11 20:35:40" "00:00:02" "DIOGENES MORAES" "CHECK-IN NORTE" "2012-01-11" "2012-01-11 20:35:38" "2012-01-11 20:35:40" "00:00:02" "DIOGENES MORAES" "CHECK-IN NORTE" "2012-01-11" "2012-01-11 20:36:01" "2012-01-11 20:36:03" "00:00:02" "DIOGENES MORAES" "CHECK-IN NORTE" "2012-01-11" "2012-01-11 20:36:01" "2012-01-11 20:36:03" "00:00:02" "DIOGENES MORAES" "ESTEIRA NORTE FIM" "2012-01-11" "2012-01-11 20:36:10" "2012-01-11 20:36:11" "00:00:01" "DIOGENES MORAES" "ESTEIRA NORTE FIM" "2012-01-11" "2012-01-11 20:36:10" "2012-01-11 20:36:11" "00:00:01" "DIOGENES MORAES" "RECOLHIMENTO NORTE" "2012-01-11" "2012-01-11 20:36:23" "2012-01-11 20:36:23" "00:00:00" "DIOGENES MORAES" "RECOLHIMENTO NORTE" "2012-01-11" "2012-01-11 20:36:23" "2012-01-11 20:36:23" "00:00:00" "DIOGENES MORAES" "CARRO EMBARQUE NORTE" "2012-01-11" "2012-01-11 20:36:30" "2012-01-11 20:36:30" "00:00:00" "DIOGENES MORAES" "CARRO EMBARQUE NORTE" "2012-01-11" "2012-01-11 20:36:30" "2012-01-11 20:36:30" "00:00:00" "LEONARDO FERREIRA" "CHECK-IN SUL" "2012-01-11" "2012-01-11 21:22:07" "2012-01-11 21:23:15" "00:01:08" "LEONARDO FERREIRA" "CHECK-IN SUL" "2012-01-11" "2012-01-11 21:22:07" "2012-01-11 21:23:15" "00:01:08" "LEONARDO FERREIRA" "CHECK-IN SUL" "2012-01-11" "2012-01-11 21:22:16" "2012-01-11 21:22:16" "00:00:00" "LEONARDO FERREIRA" "CHECK-IN SUL" "2012-01-11" "2012-01-11 21:22:16" "2012-01-11 21:22:16" "00:00:00" "LEONARDO FERREIRA" "ESTEIRA SUL INICIO" "2012-01-11" "2012-01-11 21:22:27" "2012-01-11 21:22:27" "00:00:00" "LEONARDO FERREIRA" "ESTEIRA SUL INICIO" "2012-01-11" "2012-01-11 21:22:27" "2012-01-11 21:22:27" "00:00:00" "LEONARDO FERREIRA" "ESTEIRA SUL FIM" "2012-01-11" "2012-01-11 21:22:40" "2012-01-11 21:22:40" "00:00:00" "LEONARDO FERREIRA" "ESTEIRA SUL FIM" "2012-01-11" "2012-01-11 21:22:40" "2012-01-11 21:22:40" "00:00:00" "LEONARDO FERREIRA" "RECOLHIMENTO SUL" "2012-01-11" "2012-01-11 21:23:03" "2012-01-11 21:23:04" "00:00:01" "LEONARDO FERREIRA" "RECOLHIMENTO SUL" "2012-01-11" "2012-01-11 21:23:03" "2012-01-11 21:23:04" "00:00:01" "LEONARDO FERREIRA" "CARRO EMBARQUE SUL" "2012-01-11" "2012-01-11 21:23:09" "2012-01-11 21:23:10" "00:00:01" "LEONARDO FERREIRA" "CARRO EMBARQUE SUL" "2012-01-11" "2012-01-11 21:23:09" "2012-01-11 21:23:10" "00:00:01"
  6. O tipo dos campos é time? Os dois campos necessitam estar com o mesmo tipo de dados para a função funcionar. Veja Manual MySQL 5.5 para uso da função TIMEDIFF
  7. Oi 'JRPETROLINA' Tente assim: SELECT b.nome_passageiro, l.descricao AS LOCAL, h1.DATA_MOVIMENTO, h1.Hora_inicial, h2.Hora_final, TIMEDIFF(h1.Hora_inicial, h2.Hora_final) AS Tempo_Total -- Pode usar a função SUBTIME, também FROM historico_bagagem h INNER JOIN bagagem b ON b.`ID` = h.`BAGAGEM_ID` INNER JOIN local l ON l.id = h.local_id INNER JOIN ( SELECT hb1.id, MIN(hb1.`hora_movimento`) AS Hora_inicial FROM historico_bagagem hb1 GROUP BY hb1.id ) h1 ON h1.id = h.id INNER JOIN ( SELECT hb2.id, MAX(hb2.`hora_movimento`) AS Hora_final FROM historico_bagagem hb2 GROUP BY hb2.id ) h2 ON h2.id = h.id Não testei o código. Para melhor funcionamento, na tabela HISTORICO_BAGAGEM substitua os campos DATA_MOV (date) e HORA_MOV (time) por um único campo com tipo datetime. Isto evitará o erro que detectei quando estava escrevendo o código acima, que é o de a viagem começar em um dia e acabar em outro.
  8. Tente assim: SELECT x1.xid, x1.num, x1.tipo FROM tab_xid x1 WHERE x1.xid = 8 AND x1.tipo = 'D'
  9. 'Nfrancisco' com base no que entendi fiz o seguinte exemplo. Criei uma tabela temporária em memória para armazenar os dados do exemplo. CREATE TEMPORARY TABLE tab_xid( xid INT, num INT, tipo CHAR(1) )ENGINE MEMORY; Carreguei os dadosINSERT INTO tab_xid(xid,num,tipo) VALUES(5,5, 'L'),(3, 8, 'S'),(1, 4, 'C'),(1, 5, 'D'),(7, 5, 'C'),(9, 3, 'C'),(8, 3, 'D'); Separei em uma consulta somente os dados em XID que tivessem apenas uma ocorrencia SELECT xid FROM tab_xid GROUP BY xid HAVING COUNT(xid)=1; Criei a consulta para que selecionasse os dados que tem o tipo "D" SELECT x1.xid, x1.num, x1.tipo FROM tab_xid x1 WHERE x1.tipo = 'D' AND x1.xid IN (SELECT x2.xid FROM tab_xid x2 GROUP BY x2.xid HAVING COUNT(x2.xid) = 1 );
  10. Oi 'Nfrancisco', Poderia ser mais claro, por favor. XID que retorna 7 somante a última linha que tem a tupla (7, 5, C). Obter a ocorrencia "D" como você solicitou em , você já conseguiu com o select que você apresentou.Portanto não vejo lógica em seu questionamento.
  11. Sim. Havendo falha em qualquer das transações nos tempos 3 e 4, um rollback seria aplicado na transação que ocorreu a falha. Sim. Por diversos motivos. Exemplo: Se o saldo de conta é 10 então os tempos 1 e 2 lerão 10 cada. Se tempo 3 acrescenta 10 e tempo 4 retira 10, então o saldo continuará a ser 10 e quem executou a transação 1 em tempo 3 pensará que tem 20 e quem executou a transação 2 em tempo 4 pensará que tem 0. Outro exemplo: tempos 1 e 2 leram 10. tempo 3 acrescenta 10 e tempo 4 retira 10, mas em tempo 3 houve rollback por uma falha qualquer. Tempo 3 pensará que tem 20 mas tem 10 e tempo 4 pensará que tem 0 e terá 0.
  12. 'jorge teruya' Detone estes campos date e time e crie um campo datetime O que está acontecendo agora é que ele não está conseguindo sincronizar a datahora do evento de requisição com a datahora do evento de devolução. O erro conceitual, que penso existir em sua base de dados, é que ele poderá pegar uma data de evento de requisição em um intervalo e a data de evento de devolução estará em outro intervalo. SELECT r.data, t.descricao, r.hora, d.hora FROM materiais_requisicoes r INNER JOIN tecnicos t ON t.nid = r.tecnico_nid INNER JOIN (select dev.tecnico_nid, dev.data, max(dev.hora) as hora from materiais_devolucoes dev where dev.data BETWEEN '2011-11-01' AND '2011-12-30' group by dev.tecnico_nid, dev.data ) d ON d.tecnico_nid = r.tecnico_nid WHERE r.data BETWEEN '2011-11-01' AND '2011-12-30' ORDER BY r.data; Se a tada do evento de requisição precisa ser a mesma data do evento de devolução então colocar a data na cláusula on do Inner join poderá ajud-alo. Assim, SELECT r.data, t.descricao, r.hora, d.hora FROM materiais_requisicoes r INNER JOIN tecnicos t ON t.nid = r.tecnico_nid INNER JOIN (select dev.tecnico_nid, max(dev.hora) as hora from materiais_devolucoes dev group by dev.tecnico_nid, dev.data ) d ON d.tecnico_nid = r.tecnico_nid AND d.data=r.data WHERE r.data BETWEEN '2011-11-01' AND '2011-12-30' ORDER BY r.data;
  13. OK. Entendi. Tente assim: SELECT r.data, t.descricao, r.hora, d.hora FROM materiais_requisicoes r INNER JOIN tecnicos t ON t.nid = r.tecnico_nid INNER JOIN (select dev.tecnico_nid, max(dev.hora) as hora from materiais_devolucoes dev where dev.data BETWEEN '2011-11-01' AND '2011-12-30') d ON d.tecnico_nid = r.tecnico_nid WHERE r.data BETWEEN '2011-11-01' AND '2011-12-30' ORDER BY r.data;
  14. Oi 'jorge teruya' Você rodou, rodou e não disse nada. pode ser mais explícito, por favor? Diga assim. Com base no que foi postado inicialmente eu preciso de uma consulta que me retorne os seguintes dados: campo1, campo2, campo3 ..., pois não estou sabendo como fazer.
  15. Exemplo de uso do trigger: DELIMITER $$ CREATE /*[DEFINER = { user | CURRENT_USER }]*/ TRIGGER `nomedobancodedados`.`nomedotrigger` BEFORE INSERT ON `nomedobancodedados`.`venda` FOR EACH ROW BEGIN SET NEW.valortotal = NEW.quantidadevendida * (select precoproduto from produto where produto.identificadorproduto = NEW.identificadorproduto) END$$ DELIMITER;
  16. Claro. veja o exemplo abaixo: As tabelas: Produto CREATE TABLE produto( identificadorProduto int, nomeProduto varchar(50), precoProduto double(9,2) ) VendasCREATE TABLE venda( identificadorVenda int, identificadorProduto int, dataVenda datetime, quantidadeVendida int ) A consulta SELECT dataVenda, identificadorProduto, nomeProduto, precoProduto, quantidadeVendida, (precoProduto * quantidadeVendida ) AS ValorTotalDoItem FROM venda v INNER JOIN produto p ON p.identificadorProduto = v.identificadorProduto
  17. Se a tabela vendas contém o que foi vendido e o que foi vendido é um produto, então na tabela vendas deverá haver o código do produto vendido, correto? Sabendo disso é só usar um JOIN em seu SELECT para estabelecer a relação entre as tabelas.
  18. 'Arasius' Esta comparação AND (c.`categoryid` <> 186) está conflitando com as outras. Está obrigando a trazer todas as categorias exceto a categoria 186. Se seu objetivo é trazer as categorias que estavam nesta parte da cláusula where(c.`categoryid` = 90 OR c.`categoryid` = 86 OR c.`categoryid` = 141 OR c.`categoryid` = 89 OR c.`categoryid` = 87 OR c.`categoryid` = 88 OR c.`categoryid` = 91) e mais a categoria 158, use o script abaixo: "SELECT p.nodeid, p.contentid, c.categoryid, c.nodeid, a.previewimage, a.contentid, e.title FROM `node` AS p INNER JOIN `nodecategory` AS c ON p.`nodeid` = c.`nodeid` INNER JOIN `article` AS a ON p.`contentid` = a.`contentid` INNER JOIN `category` AS d ON c.`categoryid` = d.`categoryid` INNER JOIN `nodeinfo` AS e ON p.`nodeid` = e.`nodeid` WHERE (c.`categoryid` IN (90,86,141,89,87,88,91,158)) ORDER BY p.`publishdate` DESC " A cláusula LIMIT em LIMIT 2 de sua consulta original pode estar mascarando o resultado
  19. Não aceita. Aceita do jeito que mostrei acima.
  20. Oi 'Deivid_hf', Você deve estar tentando executar um exemplo teórico. Vou te mostrar um exemplo prático. passo 1 - a tabela CREATE TABLE pessoas( nome VARCHAR(50) NULLl )ENGINE=MyISAM; Passo 2 - a carga da tabela INSERT INTO pessoas(nome) VALUES ('Adao'),('Joao'),('Antonio'),('Maria'),('Kátia'),('Marcelo'),('Roberta'); ` Passo 3 - O uso do Like Achando todos os nomes que começam pela letra 'A' SELECT nome FROM pessoas WHERE nome LIKE 'A%' A resposta é: Achando todos os nomes que terminam pela letra 'a' SELECT nome FROM pessoas WHERE nome LIKE '%a' A resposta é: Achando todos os nomes que possuem a letra 'r ' em qualquer posição do nome SELECT nome FROM pessoas WHERE nome LIKE '%r%' A resposta é:
  21. Oi Davi! o INNER JOIN é a palavra chave que informa ao SQL que ele vai realizar uma interseção entre dois conjuntos (lembra das aulas de matemática da antiga 5a série?). Para isto ele precisa que dois elementos existam, em correspondência, nos dois conjuntos. No seu caso você está colocando na cláusula ON, a comparação entre um atributo e uma constante quando deveria ser a comparação entre o atributo da tabela pessoa e o atributo da tabela corretor. Esta sua comparação não tem nexo e o sistema está mostrando dados irregulares que correspondem a igualdade passada. Corrija a igualdade da cláusula ON
  22. 'Thiago de A. C. Monteiro', Criei e carregei uma tabela em meu banco de teste para gerar o exemplo abaixo. Tabela: CREATE TABLE `minhahora` ( `campo` datetime DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 Consulta SELECT DATE(campo) AS `data`, SUM(IF(TIME(campo) >= '10:00:00' AND TIME(campo) < '12:00:00', 1,0)) AS `10h-12h`, SUM(IF(TIME(campo) >= '12:00:00' AND TIME(campo) < '14:00:00', 1,0)) AS `12h-14h`, SUM(IF(TIME(campo) >= '14:00:00' AND TIME(campo) < '16:00:00', 1,0)) AS `14h-16h`, SUM(IF(TIME(campo) >= '16:00:00' AND TIME(campo) < '18:00:00', 1,0)) AS `16h-18h` FROM minhahora GROUP BY DATE(campo) Agora você pode adaptar o script à sua necessidade.
  23. Desculpe, não entendi seu questionamento. Você quer saber quais os registros ou quantos registros estão dentro de um intervalo. Você quer comparar com a hora do servidor pra quê pois você disse que já possui a hora inicial Como o Flechaus relatou no 2º post, qual o tipo de dados de hora início?
  24. Oi 'Anderson de Camargo', Corrigi sua função DROP FUNCTION IF EXISTS alfa; DELIMITER $$ CREATE FUNCTION alfa (caracter CHAR(1)) RETURNS TINYINT(1) BEGIN DECLARE result TINYINT(1) DEFAULT 0; IF caracter IN ("0","1","2","3","4","5","6","7","8","9") OR caracter IN ("a","á","â","à","ã","ä") OR caracter IN ("A","Á","Â","À","Ã","Ä") OR caracter IN ("e","é","è","ê","ë") OR caracter IN ("E","É","È","Ê","Ë") OR caracter IN ("i","í","ì","î","ï") OR caracter IN ("I","Í","Ì","Ï") OR caracter IN ("o","ó","ò","ô","õ","ö") OR caracter IN ("O","Ó","Ò","Õ","Ô","Ö") OR caracter IN ("u","ú","ù","û","ü") OR caracter IN ("U","Ú","Ù","Û","Ü") OR caracter IN ("b","c","d","f","g","h","j","k","l","m","n","p","q","r","s","t","v","w","x","y","z") OR caracter = "ÿ" OR caracter IN ("B","C","D","F","G","H","J","K","L","M","N","P","Q","R","S","T","V","W","X","Y","Z") OR caracter IN ("ç","Ç") THEN SET result=1; END IF; RETURN result; END$$ DELIMITER;
×
×
  • Criar Novo...