AESSENET.ORG - Forum Forum di aessenet

[MySQL] Valore interno ad un range.

  • Messaggi
  • OFFLINE
    Arkantos01
    Post: 6.856
    Maestro
    Moderatore
    00 04/03/2007 19:00
    Ho una data nel formato AAAAMMGG (ex. 20070304) e devo controllare se questa è interna o esterna ad un range di valori i cui estremi sono in due colonne del MySQL, ex. 20070301 e 20070315.

    Come fo?

    Posso cambiare la disposizione della data come mi pare sia nel MySQL che nel valore che ho, in quanto ho tre variabili, una con l'anno, una col mese ed una col giorno e le aggrego io così.. (sia nella ricerca che nell'inserimento)
    "Mi berrò un cicchetto con il diavolo, ma non passerò dalla sua parte" (Bono, U2)
    "Le opinioni, si sà, sono come i coglioni... Ognuno ha i suoi" (Giorgio Gaber)
    «Ogni tanto mi chiedo cosa stiamo aspettando...»
    Silenzio.
    «Che sia troppo tardi, madame.»
    (A. Baricco, Oceano Mare)
  • OFFLINE
    Etabeta3030
    Post: 1.033
    Veterano
    00 05/03/2007 10:10
    in php c'è una funzione specifica per il confronto delle date.
    Prima devi convertire la data in una timestamp (tu dai anno-mese-giorno-ora-minuti e lui encripta il dato) poi si fa il confronto fra le varie timestamp inserite nel db.
    La trasformazione la trovi qui mktime
  • OFFLINE
    Arkantos01
    Post: 6.859
    Maestro
    Moderatore
    00 05/03/2007 13:51
    Re:

    Scritto da: Etabeta3030 05/03/2007 10.10
    in php c'è una funzione specifica per il confronto delle date.
    Prima devi convertire la data in una timestamp (tu dai anno-mese-giorno-ora-minuti e lui encripta il dato) poi si fa il confronto fra le varie timestamp inserite nel db.
    La trasformazione la trovi qui mktime



    Temo di non capire [SM=x53918]

    Io nel DB ho 3 righe (ma aumenteranno di molto!), ognuna con una colonna dove ho l'inizio ed una dove ho la fine. Poi ho un valore, come faccio a sapere all'interno di quale range è?
    Una volta identificato il range devo printare il contenuto di una terza colonna.
    "Mi berrò un cicchetto con il diavolo, ma non passerò dalla sua parte" (Bono, U2)
    "Le opinioni, si sà, sono come i coglioni... Ognuno ha i suoi" (Giorgio Gaber)
    «Ogni tanto mi chiedo cosa stiamo aspettando...»
    Silenzio.
    «Che sia troppo tardi, madame.»
    (A. Baricco, Oceano Mare)
  • OFFLINE
    aessenet
    Post: 2.845
    Veterano
    Amministratore
    00 05/03/2007 21:52
    Puoi rispiegare il tuo problema?

    Non puoi guardare semplicemente che il tuo valore sia minore di un estremo e maggiore dell'altro?
  • OFFLINE
    Etabeta3030
    Post: 1.034
    Veterano
    00 05/03/2007 23:37
    ciao Alberto finalmente sei tornato!!! [SM=x53911]

    per Arkanthos: io avevo preso spunto da qui uno e due
  • OFFLINE
    Arkantos01
    Post: 6.860
    Maestro
    Moderatore
    00 06/03/2007 16:00
    Re:

    Scritto da: aessenet 05/03/2007 21.52
    Puoi rispiegare il tuo problema?

    Non puoi guardare semplicemente che il tuo valore sia minore di un estremo e maggiore dell'altro?



    Il problema:

    Ho un calendario. Per ogni giorno devo stabilire a quale periodo appartiene (1° periodo, 2° periodo, etc.).
    I dati di ogni singolo periodo li ho nel DataBase, in una riga così composta:

    ID DESCRIZIONE INIZIO FINE

    ID= è un semplice progressivo
    DESCRIZIONE = contiene le info del periodo (1°, 2°, etc.)
    INIZIO = Contiene Anno mese e giorno (nel formato che preferisco!) dell'inizio del periodo
    FINE = Contiene Anno Mese e Giorno (nel formato che preferisco) della fine del periodo.

    Potrei fare minore della data di fine e maggiore di quella di inizio, MA nel DB avrò circa 30/40 righe e per 30 volte (uno per giorno) al caricamento di pagina dovrei fare il ciclo di IF. Ciò credo che rallenti notevolmente il caricamento della pagina.
    Volevo sapere se MySQL ha una funzione che fa in modo che io ottenga una sola riga come risultato.
    "Mi berrò un cicchetto con il diavolo, ma non passerò dalla sua parte" (Bono, U2)
    "Le opinioni, si sà, sono come i coglioni... Ognuno ha i suoi" (Giorgio Gaber)
    «Ogni tanto mi chiedo cosa stiamo aspettando...»
    Silenzio.
    «Che sia troppo tardi, madame.»
    (A. Baricco, Oceano Mare)
  • OFFLINE
    aessenet
    Post: 2.847
    Veterano
    Amministratore
    00 09/03/2007 23:41
    Non puoi riprogettare il database?

    Tu hai eventi che coinvolgono più di un giorno, e giorni in cui si possono svolgere più eventi, ovvero una relazione molti-a-molti.

    Se crei una terza tabella, chiamata giorni_eventi, costituita dalle chiavi primarie della tabella giorni e da quella eventi, la cui chiave primaria sia l'unione delle due chiavi, dovresti essere a posto.

    Quando farai l'interrogazione, essa coinvolgerà tutte e tre le tabelle, e sarà il database ad occuparsi di risolvere la complessità della cosa.

    Se hai un po' di tempo, ti consiglio di cercare su google qualche guida alla progettazione dei database o allo schema ER (entità relazione).
  • OFFLINE
    Arkantos01
    Post: 6.888
    Maestro
    Moderatore
    00 12/03/2007 19:34
    Ho trovato e letto questo.
    Ma non mi è chiaro come applicarlo nel mio caso:

    giorni_eventi:
    id: progressivo
    data: (timestamp)
    ref: nome tabella a cui far riferimento

    scuola_vela:
    id: progressivo
    inizio: timestamp INIZIO
    fine: timestamp FINE
    descr: Nome evento

    calendario:
    id: progressivo
    data: timestamp
    sez: sezione evento
    descr: descrizione
    news: link alla news di riferimento..

    Io dovrei fare una query alla tabella giorni_eventi con clausola WHERE data. OK.
    Ottengo tot righe, ma ciò implica che io inserisca una riga per ogni giorno di attività. Se è così, non mi conviene forse usare direttamente solo la tabella "calendario" (senza le altre 2) e mettervi uno if sez XXX fare un str_replace tra i dati caricati in due array (visto che nel descr il campo potrà contenere solo l'informazione che riguarda il numero del progressivo dei corsi di vela (per esempio).

    E' così o non ho capito nulla? [SM=x53927]

    PS: se qualcuno ha qualche altro link sulla progettazione DB da consigliarmi, ben venga!
    "Mi berrò un cicchetto con il diavolo, ma non passerò dalla sua parte" (Bono, U2)
    "Le opinioni, si sà, sono come i coglioni... Ognuno ha i suoi" (Giorgio Gaber)
    «Ogni tanto mi chiedo cosa stiamo aspettando...»
    Silenzio.
    «Che sia troppo tardi, madame.»
    (A. Baricco, Oceano Mare)
  • OFFLINE
    aessenet
    Post: 2.850
    Veterano
    Amministratore
    00 21/03/2007 20:11
    Quel 'ref' in giorni_eventi che cosa è? (dovresti descrivermi brevemente il contenuto delle tabelle)

    La questione è scegliere a che livello affrontare il problema: se lo affronti a livello di database, allora devi usare le tre tabelle e scrivere una query adeguata; se lo affronti tu confrontando due array in php, le tabelle non ti servono.





  • OFFLINE
    Arkantos01
    Post: 6.916
    Maestro
    Moderatore
    00 21/03/2007 20:23
    Re:

    Scritto da: aessenet 21/03/2007 20.11
    Quel 'ref' in giorni_eventi che cosa è? (dovresti descrivermi brevemente il contenuto delle tabelle)

    La questione è scegliere a che livello affrontare il problema: se lo affronti a livello di database, allora devi usare le tre tabelle e scrivere una query adeguata; se lo affronti tu confrontando due array in php, le tabelle non ti servono.








    Io ho un calendario, di un circolo sportivo.
    Per tutto il periodo ho dei corsi di vela, per i quali vorrei indicare solo data di inizio e data di fine. Ho anche delle manifestazioni che durano più giorni.. Tutte queste cose le vorrei mettere in una tabella.
    In alcuni giorni ho anche degli altri eventi (manifestazioni di una sola giornata, ricorrenze, etc.), questi li metterei in un'altra tabella.

    Quando visualizzo il calendario in ogni giorno vorrei che comparissero sia gli eventi che prendono un periodo, sia quelli che prendono una sola giornata..
    "Mi berrò un cicchetto con il diavolo, ma non passerò dalla sua parte" (Bono, U2)
    "Le opinioni, si sà, sono come i coglioni... Ognuno ha i suoi" (Giorgio Gaber)
    «Ogni tanto mi chiedo cosa stiamo aspettando...»
    Silenzio.
    «Che sia troppo tardi, madame.»
    (A. Baricco, Oceano Mare)
  • OFFLINE
    Arkantos01
    Post: 6.941
    Maestro
    Moderatore
    00 05/04/2007 12:06
    UP!! [SM=x53917] Mi farebbe comodo averlo pronto per domenica..
    "Mi berrò un cicchetto con il diavolo, ma non passerò dalla sua parte" (Bono, U2)
    "Le opinioni, si sà, sono come i coglioni... Ognuno ha i suoi" (Giorgio Gaber)
    «Ogni tanto mi chiedo cosa stiamo aspettando...»
    Silenzio.
    «Che sia troppo tardi, madame.»
    (A. Baricco, Oceano Mare)