Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Preciso de uma ajuda pra construir uma query que traga dados de outras 5 tabelas. Vou tentar ser o mais claro possível, caso falte informação, por favor me informem.
Vamos lá:
Tenho a tabela Midias: /applications/core/interface/imageproxy/imageproxy.php?img=http://jotacomdigital.com.br/imgs/midias.png&key=f237f96220b739a8f220a2af6b7e94c7bc32808bed6d25096219c3e6e26e8c00" alt="midias.png" />
e a tabela Propostas: /applications/core/interface/imageproxy/imageproxy.php?img=http://jotacomdigital.com.br/imgs/propostas.png&key=a440b92ebe9e50e9e2be90761c4583137946497439ca5870ba38a29015378cae" alt="propostas.png" />
As outras 3 tabelas é tranquilo, pois preciso apenas trazer um campo, não precisando de somas nem qualquer outra função.
O resultado deve ser esse:
/applications/core/interface/imageproxy/imageproxy.php?img=http://jotacomdigital.com.br/imgs/resultado.png&key=5f866278eb84e602cbbb89f937bd4141ae913bd98c9d5000088d78d4892e4de7" alt="resultado.png" />
Minha query Atual é essa:
SELECT
data_proposta,
propostas.source_code,
sum(midias.custo) as custo,
COUNT(data_proposta) AS propostas,
SUM(if(precog_FK <> 9, 1, 0)) AS validas
FROM propostas
LEFT JOIN midias
ON data_proposta = midias.data
GROUP BY data_proposta
Estou com problemas quando o tenho que fazer as somas dos custos da tabela mídias.
Mas eu acho que assim nao rola.
Pensa comigo:
Eu tenho várias propostas por dia de inúmeras midias (facebook, google e afins).
A consulta precisa retornar uma data por linha, com a contagem de todos os custos, cliques e impressoes das midias.
Por isso estou usando a data para comparação.
Você pode criar uma tabela de relacionamento onde existam os campos id_proposta, id_midia, data_proposta, depois faz um JOIN (INNER ou LEFT, ou o que for conveniente) para identificar qual é qual.
São 5 ou 2 tabelas sendo lidas ?
Qual o agrupamento ?
Confesso que não entendi o problema.
O resultado finald e vem de 5 tabelas, mas minha dificulda está em montar a query que faz a soma de alguns campos específicos.
Preciso que o resultado da query seja listado por data, e traga a soma dos cliques, impressoes e custo da tabela midias.
Entendeu?
Mas o fato de fazer join com 5 tabelas PODE fazer que o produto cartesiano provoque o erro.
>
Preciso que o resultado da query seja listado por data, e traga a soma dos cliques, impressoes e custo da tabela midias.
Entendeu?
Creio que sim , me parece um caso simples
SELECT
data_proposta,
propostas.source_code,
sum(midias.custo) as custo,
COUNT(data_proposta) AS propostas,
SUM(if(precog_FK <> 9, 1, 0)) AS validas
FROM propostas
LEFT JOIN midias
ON data_proposta = midias.data
GROUP BY data_proposta,
propostas.source_code
Cara, essa query nao rodou.
Fiz da seguinte maneira e rolou:
Criei um indice nas tabelas pra otimizar a consulta e fiz essa query:
SELECT
m.data,
date_format(m.data,'%d-%m-%Y') AS mdata,
m.midia_origem,
p.source_code,
m.campanha,
SUM(if(precog_FK <> 9, 1, 0)) AS validas,
COUNT(m.campanha) AS propostas,
SUM(m.custo) as custo
FROM
propostas p
LEFT JOIN
midias m
ON m.source_code = p.source_code
GROUP BY
mdata
ORDER BY
mdata ASC, m.source_code ASC
O ideal é cria um relacionamento entre IDs, pois fica confuso por data...
Por exemplo, midia 1 com proposta 1, midia 2 com proposta 1 também, tornará sua vida mais fácil, sem falar que índices nestes itens tornaria a consulta mais rápida.