Ciao a tutti,
sto tentando di estrarre dei dati da una tabella del mio db a diverse condizioni e in cui finora non mi ero mai cimentata.
SELECT * FROM audio
WHERE NOW() BETWEEN audio_dataInizio AND audio_dataFine
AND clienti_id = 100
AND filiali_id = 500
AND audio_attivo = 1
AND FIND_IN_SET('2', audio_attivo_for_radio) <> 0
AND audio_id NOT IN ( SELECT audio_id FROM storico WHERE clienti_id=100 AND filiali_id = 500 AND audio_id!=0)
UNION ALL
SELECT * FROM audio
WHERE NOW() BETWEEN audio_dataInizio AND audio_dataFine
AND clienti_id = 100
AND audio_attivo = 1
AND audio_id!=0
AND NOT EXISTS ( SELECT * FROM audio
WHERE NOW() BETWEEN audio_dataInizio AND audio_dataFine
AND clienti_id = 100
AND filiali_id = 500
AND audio_attivo = 1
AND audio_id!=0
AND FIND_IN_SET('2', audio_attivo_for_radio) <> 0
AND audio_id NOT IN ( SELECT audio_id FROM storico WHERE clienti_id=100 AND audio_id!=0)
)
AND audio_id IN (SELECT audio_id FROM storico WHERE clienti_id=100 AND filiali_id=500 ORDER BY storico_data ASC)
ORDER BY RAND() LIMIT 1
La query che ho riportato deve estrarre il nome di un file audio associato
- al cliente_id 100,
- alla filiale_id 500,
- deve essere abilitato,
- deve essere attivo per suonare sul canale numero 2
- lo stesso file NON deve essere presente nella tabella STORICO se associato allo stesso cliente e filiale per non creare una ripetizione della stessa musica ma, (essendo questa query ripetuta in un ciclo) qualora sia impossibile rispettare questa condizione, la query dovrà comunque restituirlo onde evitare un risultato nullo con la conseguenza di un mancato ascolto.
Questa query funziona ma risulta lenta.
Esiste un modo alternativo che esaudisca comunque ciò che voglio fare?
Grazie a tutti in anticipo