Yuri Sa 0 Denunciar post Postado Fevereiro 21, 2011 Olá, gostaria de saber se vocês conseguem me ajudar com uma consulta!!! Desde já muito obrigado Minha consulta é para comparar e selecionar uma linha com uma clausula "where ... like", o problema é que se ele retorna todas as similares, não só a mais precisa. SELECT dst, prefixo, valor FROM cdrdiaagrup INNER JOIN dtlTarifas ON cdrdiaagrup.tarifa = dtlTarifas.linkTarifas WHERE dst like prefixo Na tablea "dtlTarifas", eu tenho a coluna prefixo, que contém dados assim: 011951% 0119512% % e quando eu rodo a query com o dst = "011951237814" ela retorna todas as linas de "dtlTarifas" repetindo os resultados "cdrdiaagrup" em cada linha como eu conseguiria fazer o join com uma só linha onde o 'prefixo' fosse mais preciso (ou mais longo), ou com um maior indice de simildaridade, neste caso o 0119512%. TABELAS dtlTarifas CREATE TABLE `asteriskcdrdb`.`dtlTarifas` ( `idDtlTarifas` int(11) NOT NULL auto_increment, `prefixo` varchar(50) default NULL, `cadencia1` varchar(50) default NULL, `cadencia2` varchar(50) default NULL, `cadencia3` varchar(50) default NULL, `tipo` varchar(50) default NULL, `nome` varchar(50) default NULL, `obs` varchar(255) default NULL, `linkTarifas` int(11) default NULL, `prioridade` varchar(50) default NULL, PRIMARY KEY (`idDtlTarifas`) ) ENGINE=MyISAM AUTO_INCREMENT=8 DEFAULT CHARSET=latin1; insert into dtlTarifas (prefixo,tipo,linkTarifas) values (0__9%,'cell',1) insert into dtlTarifas (prefixo,tipo,linkTarifas) values (%,'tutti',1) insert into dtlTarifas (prefixo,tipo,linkTarifas) values (011951%,'finanze',1) insert into dtlTarifas (prefixo,tipo,linkTarifas) values (0119512%,'sl21',1) insert into dtlTarifas (prefixo,tipo,linkTarifas) values (0119512%,'sl21',1) cdrdiaagrup CREATE TABLE `asteriskcdrdb`.`cdrdiaagrup` ( `calldate` datetime NOT NULL default '0000-00-00 00:00:00', `clid` varchar(80) NOT NULL default '', `src` varchar(80) NOT NULL default '', `dst` varchar(80) NOT NULL default '', `dcontext` varchar(80) NOT NULL default '', `channel` varchar(80) NOT NULL default '', `dstchannel` varchar(80) NOT NULL default '', `lastapp` varchar(80) NOT NULL default '', `lastdata` varchar(80) NOT NULL default '', `duration` int(11) NOT NULL default '0', `billsec` int(11) NOT NULL default '0', `disposition` varchar(45) NOT NULL default '', `amaflags` int(11) NOT NULL default '0', `accountcode` varchar(20) NOT NULL default '', `uniqueid` varchar(32) NOT NULL default '', `tarifa` varchar(255) NOT NULL default '' ) ENGINE=MyISAM DEFAULT CHARSET=latin1; insert into cdrdiaagrup (calldate,clid,src,dst,tarifa) values ('2048-01-20 16:45:48', '"Dr Lucas" <007>', '"Dr Lucas" <007>', '011951237814', '1'); insert into cdrdiaagrup (calldate,clid,src,dst,tarifa) values ('2048-01-20 16:54:48', '"Dr Lucas" <007>', '"Dr Lucas" <007>', '01147191198', '1'); insert into cdrdiaagrup (calldate,clid,src,dst,tarifa) values ('2048-01-20 16:12:48', '"Dr Lucas" <007>', '"Dr Lucas" <007>', '01196660661', '1'); Só para vocês saberem a finalidade e quem sabe poder me ajudar com outra consulta, eu preciso me dar o tipo de ligação que é baseado no prefixo, analisando um log de asterisk e comparando ele com a outra tabela que vai conter os prefixos e o tipo de ligação. Alguém tem alguma luz? Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Fevereiro 23, 2011 Não saco muito de MySql mas acho que isto te ajuda. Compartilhar este post Link para o post Compartilhar em outros sites
Yuri Sa 0 Denunciar post Postado Fevereiro 23, 2011 Pois é rapaz, mas a m***** é que ele TAMBÈM retorna mais de um resultado...já tentei tbm...fora que é muito mais chato, tem que fazer indices e etc... Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Fevereiro 23, 2011 Faz uma function que compare duas string e retorne quantos caracteres a partir do 1º batem, ordene desc por este resultado BASE A1234567890 CAMPO1 A12345 - 6 CAMPO2 A123456 - 7 CAMPO3 A12 - 3 Ou até talvez o próprio length da string já resolva. Compartilhar este post Link para o post Compartilhar em outros sites