Visualizzazione dei risultati da 1 a 7 su 7

Discussione: Problemi filtro data

  1. #1

    Problemi filtro data

    Salve a tutti,
    io ho seguente problema: spero riusciate a risolvermelo.
    Ho una tabella con i seguenti campi:

    id int(10)
    nome varchar(40)
    data_inserimento timestamp
    data_schedulazione varchar(40)

    Ora concentriamoci solo sui primi 3: io ho creato un modulo di ricerca per cercare delle schede sia per id, sia per nome che data_inserimento. Se non si inserisce nulla e si lancia la ricerca, verranno messi '%' (e l'operatore di ricerca è il like) ad ogni campo e lancio una query simile a:

    Codice PHP:
    SELECT *
    FROM Tabella
    WHERE id like 
    '%'
              
    AND nome like '%'
              
    AND date_format(data_inserimento'%d/%m/%Y'like '%' 
    e in questo modo funziona egregiamente.
    Ugualmente funziona parametrizzando i campi id e nome: i problemi iniziano se parametrizzo il campo data_inserimento con valori tipo gg/mm/aaaa.
    Una nota: nel form di ricerca ho fatto in modo da poter scegliere da un menu a tendina se la data_inserimento deve essere < o = o > di una certa data impostata. Se inserisco % allora l'operatore diventa un like; se inserisco una data tipo gg/mm/aaaa allora l'operatore può essere < o = o >.

    Codice PHP:
    SELECT *
    FROM Tabella
    WHERE id like 
    '%'
              
    AND nome like '%'
              
    AND date_format(data_inserimento'%d/%m/%Y') < '08/11/2006' 
    Il problema è che non funziona correttamente: nonostante la data sia con il giorno sempre a due cifre (gg p.es. 08) mi da dei risultati (anche se sbagliati) solo se lo inserisco ad una cifra (8/11/2006)

    Non so come fare: forse perché il campo è di tipo TIMESTAMP? Ho pensato anche di eliminare la funzione date_format e convertire da PHP la data inserita nel formato TIMESTAMP di tipo MYSQL (che so essere diverso da quello Unix) ma non so come si fa.
    Facendo manualmente sembra funzionare però:

    Codice PHP:
    SELECT *
    FROM Tabella
    WHERE id like 
    '%'
              
    AND nome like '%'
              
    AND data_inserimento) < '2006-11-07 14:59:36' 
    Qualcuno sa dirmi dei suggerimenti? Una soluzione pulita oppure la funzione per convertire una data in TIMESTAMP MYSQL?

    Grazie a tutti
    Sono secoli che dormo, secoli che non levo il mio possente volo di Drago. Ora voglio l'immensità del cielo ed il sole splendente.
    IO SONO IL DRAGO! Io sono!

    Visitate il mio blog tecnologico:
    http://www.levysoft.it

  2. #2
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,923
    prova con questo formato

    ... AND date_format(data_inserimento, '%Y-%m-%d') < '2006-11-08'

  3. #3
    Non funziona perche la data formata a quel modo e' una stringa.

    dovresti impostare la data che ricevi dal form come yyyy-mm-dd e poi potrai fare tutti i confronti che vuoi a partire dal between a tutto il resto direttamente con il valore del campo.

    Una sola attenzione: poiche' il timestamp considera anche le ore:minuti:secondi, la data fornita come yyyy-mm-dd assume come valore di default 00:00:00 e quindi a parita' di data risultera' minore di quella impostata nel campo datetime. Es. oggi:

    2006-11-08 00:00:00 < 2006-11-08 12:12:00

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

  4. #4
    Grazie ragazzi: sieti mitici ora funziona!
    Un'altra domandina: c'è una funzione php o altro per convertire una data tipo gg/mm/aaaa in aaaa-mm-gg?
    Sono secoli che dormo, secoli che non levo il mio possente volo di Drago. Ora voglio l'immensità del cielo ed il sole splendente.
    IO SONO IL DRAGO! Io sono!

    Visitate il mio blog tecnologico:
    http://www.levysoft.it

  5. #5
    http://forum.html.it/forum/showthrea...hreadid=839754

    se hai mysql >= 4.1 cerca la funzione STR_TO_DATE()


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

  6. #6
    OK risolto mettendo:

    AND date_format(data_inserimento, '%Y-%m-%d') $operatore_data_inserimento str_to_date('$data_inserimento','%d/%m/%Y')

    Ora la domanda nasce spontanea (scusate se vi stresso): ho un altro campo:
    data_schedulazione varchar(40)

    1. Per una data può andare bene definirla come varchar o è meglio date? Che vantaggi ne traggo?
    2. La condizione di ricerca come deve essere: essendo varchar la definisco come una stringa normale?
    3. Voi come fareste al posto mio? Nel senso che data_inserimento è una TIMESTAMP e quindi il formato è per forza del tipo aaaa-mm-gg. Ma data_schedulazione la imposto io manualmente e ho pensato che fosse meglio impostarla come varchar (per non essere vincolato al formato della data con i trattini che non è consono in Italia.
    Sono secoli che dormo, secoli che non levo il mio possente volo di Drago. Ora voglio l'immensità del cielo ed il sole splendente.
    IO SONO IL DRAGO! Io sono!

    Visitate il mio blog tecnologico:
    http://www.levysoft.it

  7. #7
    se e' una data la gestirai come data, se varchar la gestirai come varchar... banale watson...

    Significa che una data viene vista come un numero e ordinata come fosse un numero, una stringa come insieme di caratteri ascii. Prova ad ordinare una data secondo la codifica ascii e poi mi racconti....

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

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.