Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Yuri Sa

Selecionar qual linha LIKE.

Recommended Posts

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

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

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.