aiuto query mysql

Forum dedicato alla programmazione.

Moderatore: Staff

Regole del forum
1) Citare in modo preciso il linguaggio di programmazione usato.
2) Se possibile portare un esempio del risultato atteso.
3) Leggere attentamente le risposte ricevute.
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
agharta
Linux 0.x
Linux 0.x
Messaggi: 81
Iscritto il: lun 17 dic 2007, 13:58
Località: Bassano del grappa

Re: aiuto query mysql

Messaggio 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

Rispondi