Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    [MySQL 4.1.22] Aiuto su query con IF con doppia condizione

    Ciao a tutti,
    ho con mio rammarico scoperto che una query di questo tipo:

    SELECT attivita.*, IF ((attivita_esp.data_inserimento IS NOT NULL) AND (attivita_esp.data_scadenza>NOW()),1,0) AS has_esp, IF (attivita_esp.data_scadenza<=NOW(),1,0) AS scaduto FROM attivita LEFT JOIN attivita_esp ON (attivita.id=attivita_esp.attivita_id) WHERE attivita.stato='1' AND attivita.categorie_id IN (235,236,237) ORDER BY has_esp DESC, attivita.ordine DESC, attivita.click DESC, attivita.ragione ASC

    Non funziona a causa del primo IF composto da due condizioni da valutare:
    IF ((attivita_esp.data_inserimento IS NOT NULL) AND (attivita_esp.data_scadenza>NOW()),1,0) AS has_esp

    Infatti tale condizione viene sempre valutata falsa seppure in alcuni casi dovrebbe essere vera; su MySQL 4.1.7 invece funziona correttamente.

    Esiste qualche workaround per rimediare alla cosa?

    Grazie!

  2. #2
    Prova a toglierlo del tutto quel IS NOT NULL... non serve a nulla perche' se e' TRUE la seconda affermazione di certo e' TRUE anche la prima (IS NOT NULL).

    Cioe' non e' possibile che ci sia in scadenza qualcosa che non esiste proprio come inserimento.

    Oppure prova a mettere la condizione nel WHERE.

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  3. #3
    E' vero in parte, cioè:

    - se la seconda è vera, la prima è sicuramente vera;

    - se la prima è vera, la seconda potrebbe essere falsa.

    Ed è proprio questo secondo caso che devo discernere.


    Non posso mettere la condizione nel WHERE dato che devo avere tutti i record a prescindere dal valore di quei due IF. Sarà poi lo script che formatterà (a livello estetico) in maniera diversa i due record.. ma non posso escluderli.

    Oltretutto la prima condizione mi è preziosa per l'ordinamento.


  4. #4
    non capisco perche' non funzioni. A meno che tu non consideri '0000-00-00' come NULL

    NULL e' proprio NULL cioe' il campo non esiste. Non ricordo se c'e' differenza tra 4.1.7 e quella attuale che non citi... potrebbe anche essere e senz'altro c'e' una diversa gestione delle date. Ma non saprei se esiste la differenza nella gestione del NULL.


    ok visto nel titolo la 4.1.22 .....

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  5. #5
    Mi hai dato un grande input.. nn avevo pensato alla gestione corretta del NULL, questo funziona su entrambi:

    IF ((attivita_esp.data_inserimento IS NOT NULL) AND ((attivita_esp.data_scadenza > NOW( ) OR attivita_esp.data_scadenza IS NULL)), 1, 0) AS has_esp

    Grazie, ciao!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.