Un OR nella Select credo mi stia facendo casino

di ricmanx il
5 risposte

Ho un tabella Nominativi con questi campi 

id
nome
id_squadra
dataentry
dataexit

Vorrei selezionare tutti gli id che rientrano nel range in cui Oggi sta dentro a dataentry e dataexit e dove dataexit può essere anche Null e che  l'id della squadra sia ad esempio 1 (che passo poi con una var in php)

Ho provato così 

SELECT * FROM Nominativi WHERE id_squadra='1' AND dataexit IS NULL OR CURDATE() BETWEEN dataentry AND dataexit;

MA mi restituisce anche un nominativo il cui id_squadra è 2 ... Potrebbe essere gestito male quell'Or?

Come potrei correggere la query?

Allego foto di un esempio dati..

5 Risposte

  • Salve,

    direi che la WHERE non raggruppa correttamente gli operatori AND/OR, seguendo pero' correttamente le regole di precedenza degli operatori…
    quindi, l di la' che l'espressione di ricerca sia “corretta” in senso lato, devi utilizzare delle parentesi per contestualizzare correttamente le precedenze degli operatori

    salutoni romagnoli
    – 
    Andrea

  • SELECT * FROM Nominativi WHERE (id_squadra='1') AND ((dataexit IS NULL) OR (CURDATE() BETWEEN dataentry AND dataexit));

    Meglio evitare incertezze

  • 11/11/2024 - oregon ha scritto:


    SELECT * FROM Nominativi WHERE (id_squadra='1') AND ((dataexit IS NULL) OR (CURDATE() BETWEEN dataentry AND dataexit));

    Meglio evitare incertezze

    :D

    – 
    Andrea

  • Grazie a tutti... le parentesi sono state fondamentali!!!

Devi accedere o registrarti per scrivere nel forum
5 risposte