Ciao,
dato che MySQL non supporta le FULL JOIN non riesco a capire come potrei fare una UNION con 2 tabelle.
CLIENTI_SERVIZI (scrivo solo i campi che mi interessano)
id
id_servizio
dataora_inizio
...
INCASSI
id
servizio_id
dataora_incasso
insoluto
id_categoria
...
SERVIZI
id
descrizione
tipo_servizio
id_tipo_pagamento
...
In sostanza ci sono dei CLIENTI_SERVIZI che producono una riga di incasso ed altri no.
Devo estrarre i dati per visualizzare un grafico in un range di date suddiviso per tipologia di servizio (servizi.tipo_id) e incasso prodotto.
Al momento ho fatto così:
Codice PHP:
SELECT
DATE_FORMAT(i.dataora_incasso, '%m/%Y') data_incasso,
SUM( IF(i.id_categoria NOT IN (8), i.importo, 0)) incasso,
SUM( IF(s.tipo_servizio = 1 AND s.id_tipo_pagamento = 2 AND i.insoluto = 0 AND i.id_categoria NOT IN (8,10), 1, 0) ) nuovi_rid,
SUM( IF(s.tipo_servizio = 1 AND s.id_tipo_pagamento = 3 AND i.insoluto = 0 AND i.id_categoria NOT IN (8,10), 1, 0) ) nuovi_web
FROM
clienti_servizi cs INNER JOIN incassi ON cs.id_cliente_servizio = i.id_cliente_servizio
INNER JOIN servizi s ON s.id_servizio = i.id_servizio
WHERE
DATE(i.dataora_incasso) >= STR_TO_DATE('$data_dal','%d/%m/%Y')
AND DATE(i.dataora_incasso) <= STR_TO_DATE('$data_al', '%d/%m/%Y')
AND i.pagato = 1
AND cs.id_sede = 1
GROUP BY
data_incasso
ORDER BY
i.dataora_incasso;
Ci sono degli IF perchè devo estrarre le tipologie ed uso SUM perchè devo comunque ottenere un risultato suddiviso per giorno (giorno, settimana, mese o anno).
Il problema è che così escludo tutti quei servizi che non hanno prodotto incasso.
Facendo una LEFT JOIN il problema invece è un altro: sul grafico i dati devono essere suddivisi con dataora_incasso, però nel caso di un servizio che non ha incasso vorrei usare la dataora_inizio.
Qualche aiuto? (non so se sia chiaro il tutto, in caso darò chiarimenti).
Grazie
ciao