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

    [MySql] confronto fra più date

    Buongiorno.
    Ho una tabella con questi campi data/ora:
    - dtInizioManifestazione
    - dtFineManifestazione
    - dtEliminaManifestazione

    Le prime due sono valorizzate dall'operatore con un applicativo.
    La terza ha valore NULL per default.

    Ho N record ovviamente nella tabella, dove a seconda di eventi, il campo dtEliminaManifestazione, viene valorizzato con la data aggiornata in automatico al mese successivo.
    Quindi alcuni record hanno valore NULL nel campo dtEliminaManifestazione, altri la data al mese successivo.

    Questa è la query che utilizzo:
    [sql]
    SELECT * FROM tb_eventi_28022024 as a
    WHERE (now() BETWEEN a.dtInizioManifestazione AND a.dtFineManifestazione)
    [/sql]
    In questo modo, mi tira fuori tutti record senza considerare se il campo dtEliminaManifestazione ha una data.

    Perché questo campo dtEliminaManifestazione, mi serve per togliere in visualizzazione alcuni record.

    Come lo implemento?
    Grazie.

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    Cosa significa "come lo implemento"? Spiega meglio.
    Se il tuo scopo è non mostrare i record che hanno dtEliminaManifestazione valorizzato, metti la condizione in AND:

    codice:
    WHERE (now() BETWEEN a.dtInizioManifestazione AND a.dtFineManifestazione) AND (dtEliminaManifestazione IS NULL)
    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Quote Originariamente inviata da LeleFT Visualizza il messaggio
    Cosa significa "come lo implemento"? Spiega meglio.
    Se il tuo scopo è non mostrare i record che hanno dtEliminaManifestazione valorizzato, metti la condizione in AND:
    codice:
    WHERE (now() BETWEEN a.dtInizioManifestazione AND a.dtFineManifestazione) AND (dtEliminaManifestazione IS NULL)
    Ciao.
    No tutto il contrario.
    In pratica devo confrontare il now() e a.dtInizioManifestazione, sia con a.dtFineManifestazione che, con a.dtEliminaManifestazione

    E mi deve tira fuori tutti i record non ancora scaduti e quelli che hanno dtEliminaManifestazione a NULL
    Ultima modifica di ANTAGONIA; 28-02-2024 a 14:23

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    Perchè dici "tutto il contrario" se poi in realtà la condizione che ho aggiunto io è corretta (stando a quanto hai affermato alla fine)?
    Continuo a non capire cosa vuol dire "confrontare il now() e a.dtInizioManifestazione, sia con a.dtFineManifestazione che, con a.dtEliminaManifestazione"

    Fai degli esempi.
    Posta dei dati (meramente esemplificativi) e specifica cosa deve tirar fuori e cosa no (e possibilmente perchè).
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  5. #5
    Quote Originariamente inviata da LeleFT Visualizza il messaggio
    Perchè dici "tutto il contrario" se poi in realtà la condizione che ho aggiunto io è corretta (stando a quanto hai affermato alla fine)?
    Continuo a non capire cosa vuol dire "confrontare il now() e a.dtInizioManifestazione, sia con a.dtFineManifestazione che, con a.dtEliminaManifestazione"

    Fai degli esempi.
    Posta dei dati (meramente esemplificativi) e specifica cosa deve tirar fuori e cosa no (e possibilmente perchè).
    Nella tabella ho:

    __________________________________________________ __________________________________
    id ---------- tipo ----------- dtInizioManifestazione -------- dtFineManifestazione ------- dtEliminaMani
    1 | Man A | 2023-12-28 13:30:00 | 2030-12-31 13:30:00 | 2024-02-27 13:00
    34 | Man B | 2023-12-28 13:30:00 | 2030-12-31 13:30:00 | 2024-03-27 13:00
    35 | Man C | 2023-12-28 13:30:00 | 2030-12-31 13:30:00 | NULL
    54 | Man A | 2023-12-28 13:30:00 | 2030-12-31 13:30:00 | 2024-03-02 13:00
    55 | Man D | 2023-12-28 13:30:00 | 2030-12-31 13:30:00 | NULL
    __________________________________________________ __________________________________


    Ho un menu nella pagina dove devo visualizzare tutti i record non scaduti + quelli che nel campo dtEliminaManifestazione hanno NULL

    Quindi, con una sola query dovrei eliminare in visualizzazione il record dove nel dtEliminaMan ha la data del 2024-02-27 perché è scaduta, e lasciare visibili tutti gli altri

    Grazie.

  6. #6
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    Banalmente:

    codice:
    WHERE (now() BETWEEN a.dtInizioManifestazione AND a.dtFineManifestazione) AND 
          (a.dtEliminaManifestazione IS NULL OR a.dtEliminaManifestazione > now())
    Poi vedi tu se usare il maggiore o il maggiore uguale in base alle tue esigenze.

    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  7. #7
    Quote Originariamente inviata da LeleFT Visualizza il messaggio
    Banalmente:

    codice:
    WHERE (now() BETWEEN a.dtInizioManifestazione AND a.dtFineManifestazione) AND 
          (a.dtEliminaManifestazione IS NULL OR a.dtEliminaManifestazione > now())
    Poi vedi tu se usare il maggiore o il maggiore uguale in base alle tue esigenze.

    Ciao.

    Ti ringrazio è perfetta cosi.

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 © 2024 vBulletin Solutions, Inc. All rights reserved.