[MySQL] Valore interno ad un range.

Versione Completa   Stampa   Cerca   Utenti   Iscriviti     Condividi : FacebookTwitter
Arkantos01
00domenica 4 marzo 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)
Etabeta3030
00lunedì 5 marzo 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
Arkantos01
00lunedì 5 marzo 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.
aessenet
00lunedì 5 marzo 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?
Etabeta3030
00lunedì 5 marzo 2007 23:37
ciao Alberto finalmente sei tornato!!! [SM=x53911]

per Arkanthos: io avevo preso spunto da qui uno e due
Arkantos01
00martedì 6 marzo 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.
aessenet
00venerdì 9 marzo 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).
Arkantos01
00lunedì 12 marzo 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!
aessenet
00mercoledì 21 marzo 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.





Arkantos01
00mercoledì 21 marzo 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..
Arkantos01
00giovedì 5 aprile 2007 12:06
UP!! [SM=x53917] Mi farebbe comodo averlo pronto per domenica..
Questa è la versione 'lo-fi' del Forum Per visualizzare la versione completa clicca qui
Tutti gli orari sono GMT+01:00. Adesso sono le 01:06.
Copyright © 2000-2024 FFZ srl - www.freeforumzone.com