Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá pessoal estou com uma dúvida.
Preciso fazer o seguinte SELECT:
SELECT calldate AS data, src AS origem, dst AS destino, SEC_TO_TIME(billsec) AS duracao,
(SELECT CASE WHEN billsec >= 1 AND billsec <= 30 THEN ROUND((**custo**/2),2) WHEN billsec > 30 AND (billsec%6 = 0) THEN ROUND((billsec/6)***custo**,2) ELSE ROUND(FLOOR((billsec/6)+1)***custo**,2) END) AS valor
FROM rotas, tarifas
WHERE DATE_FORMAT(calldate, '%Y-%m-%d')
BETWEEN '2010-04-01'
AND '2010-04-31'
AND disposition = 'ONLINE'
AND channel LIKE 'S%'
AND dstchannel LIKE 'S%'
AND dcontext = 'route'
AND billsec >= 3
AND (dst NOT LIKE '55%'
AND dst NOT LIKE '86%'
AND dst NOT LIKE '___'
AND dst NOT LIKE '_____'
AND dst = LIKE (cod_area))
ORDER BY calldate DESC;
Os campos em negritos pertecem a tabela "tarifas". O que eu preciso é que o LIKE busque os códigos na outra tabela.
Sem consultar a tabela tarifa eu faria assim: (teria que alterar também o "custo" para o valor "23.50" por exemplo)
"AND (dst NOT LIKE '55%'
AND dst NOT LIKE '0800%'
AND dst NOT LIKE '___'
AND dst NOT LIKE '_____'
[b]AND dst LIKE '1%'[/b])"
Aí preciso buscar esse código lá no campo "cod_area' da tabela "tarifas". Do contrário tenho que fazer um SELECT para a tarifa de cada código. O que ia ficar gigantesco, sem contar que os valores das tarifas sofrem alterações, ai teria que alterar cada SELECT, quando alguma tarifa fosse alterada. Pensem fazer isso em mais de 400 cidades??? http://forum.imasters.com.br/public/style_emoticons/default/ermm.gif
A tabela "tarifa" está assim:
cod_area, area, custo
1, SP, 23.50
2, RJ, 29.90
3, PR, 32.50
Ai o SELECT vai verificar os códigos e aplicar os valores, conforme os dados da tabela "tarifas".
Nisso vem a dúvida, qual a sintaxe correta para fazer essa consulta? Pois o que estou tentando sei que está errado. ;)
Desde já agradeço a ajuda de todos.
Carregando comentários...