Pagina 2 di 2

Re: aiuto query mysql

Inviato: mar giu 20, 2017 8:59
da agharta
darkstaring ha scritto:Sei stato chiarissimo....cercherò di risolvere con le join...
Allego il db
db.txt


Allora vediamo, se ho capito bene:

select dip.*, o.*, z.*, cz.*, ind.*, case when (o.id is not null) then 'O' else 'I' end as TIPO from dipendenti dip
left join orari o on (o.id_dipendente = dip.id AND date(orari.tempo_inizio) >= '2017-06-05' AND date(orari.tempo_fine) <= '2017-06-12')
left join zone z on (z.id = o.id_zona )
left join cat_zone cz on (cz.id = z.id_cat_zone )
left join indisponibilita ind on (ind.id_dipendente = dip.id and o.id is null AND date(ind.tempo_inizio) >= '2017-06-05' AND date(ind.tempo_fine) <= '2017-06-12') -- <<< con o.id is null valorizzo i dati di indisponibilita solo se orari non e' valorizzato
where coalesce (o.id,ind.id) is not null -- <<< cosi' escludo i dati che non hanno né indisponibilita né orari. Vedi te se ti serve
ORDER BY o.tempo_inizio, ind.tempo_inizio, dip.cognome

In questo modo ti escono tutti i dati con in più 'O' o 'I' a seconda che sia orario o indisponibilita. Così riesci a capirlo al volo con php. Non so se php supporta valori booleani true/false, se si e se vai meglio sostituisci con true/false o anche con 0/1. Vedi te.
Adatta il risultato secondo le tue esigenze.

Secondo me comunque il risultato è un po confusionario..... non andresti meglio ad avere un dataset così?

DIPENDENTE, DATA, TIPO (O,I), ecc...,ecc...

Fammi sapere se è quello che cercavi di fare.

Ciao