
Originariamente inviata da
pippuccio76
Ormai il db è fatto , praticamente per ogni appuntamento c'è un luogo è una data , le altre due date sono null , io vorrei ordinare per data qualunque sia il luogo ...
Scusa, ma questo non è una risposta. Se una cosa è fatta male allora bisogna rifarla ! Vedi, se le cose fossero state fatte in maniera corretta sin dall'inizio non porresti la domanda e avresti una query molto più snella.
Comunque (sembra funzionare dai dati che hai postato)
codice:
Select appuntamenti_clienti.*,
clienti.ragione_sociale,
luogo_agenda.citta_agenda,
agenda_cagliari.data as data_cagliari,
agenda_olbia.data as data_olbia,
agenda_sassari.data as data_sassari,
orari_apertura.orario
FROM appuntamenti_clienti
JOIN clienti
ON appuntamenti_clienti.id_cliente=clienti.id
JOIN luogo_agenda
ON appuntamenti_clienti.id_luogo_agenda=luogo_agenda.id
LEFT JOIN agenda_cagliari
ON (appuntamenti_clienti.id_agenda= agenda_cagliari.id AND
appuntamenti_clienti.id_luogo_agenda= 1 AND
agenda_cagliari.data>=NOW())
LEFT JOIN agenda_olbia
ON (appuntamenti_clienti.id_agenda= agenda_olbia.id AND
appuntamenti_clienti.id_luogo_agenda= 2 AND
agenda_olbia.data>=NOW())
LEFT JOIN agenda_sassari
ON (appuntamenti_clienti.id_agenda= agenda_sassari.id AND
appuntamenti_clienti.id_luogo_agenda= 3 AND
agenda_sassari.data>=NOW())
LEFT JOIN orari_apertura
ON
(agenda_olbia.orari_apertura_id=orari_apertura.id AND
appuntamenti_clienti.id_luogo_agenda= 2)
OR
(agenda_cagliari.orari_apertura_id=orari_apertura.id AND
appuntamenti_clienti.id_luogo_agenda= 1)
OR
(agenda_sassari.orari_apertura_id=orari_apertura.id AND
appuntamenti_clienti.id_luogo_agenda= 3)
WHERE agenda_cagliari.data IS NOT NULL
OR agenda_olbia.data IS NOT NULL
OR agenda_sassari.data IS NOT NULL
ORDER BY
CASE WHEN agenda_cagliari.data IS NOT NULL
THEN agenda_cagliari.data
ELSE CASE WHEN agenda_olbia.data IS NOT NULL
THEN agenda_olbia.data
ELSE agenda_sassari.data
END
END
LIMIT 3
Capture20171102-001.JPG