Questo potrebbe sembrare pazzo per un sacco di sviluppatori che amano approfittare delle funzioni di database,
Ma dopo aver esaustivo i problemi di pensiero, creazione e bugfix delle applicazioni per mysql e postgrsql con funzioni di confronto di php, sono giunto alla conclusione (per me), che il modo più semplice, che è il più semplice con meno mal di testa SQL, non è quello di approfittare di qualcuno di loro.
Perché? perché se si sta sviluppando in un linguaggio middleware come PHP, PHP ha tutte queste funzioni, e sono più facili da implementare nell'ode dell'applicazione confrontando gli interi. PostgreSQL timestamp NON è == unix timestamp e di MySQL unix timestamp non è PostgreSQL del o Oracoli timestamp .. diventa più difficile alla porta se si utilizza timestamp del database ..
quindi basta usare un intero, non è un timestamp, come il numero di secondi da gennaio 1 ° gennaio 1970 a mezzanotte. e non importa i timestamp del database. , e utilizzare gmdate() e memorizzare tutto come tempo gmt per evitare problemi di fuso orario.
se è necessario cercare, ordinare o confrontare il giorno da altri dati, o il mese o l'anno o il giorno della settimana, o qualsiasi cosa, nella propria applicazione, e tipo di dati INTEGER per time_day, time_hour, time_seconds. . o qualunque cosa tu voglia indicizzare per la ricerca, renderà i database più semplici e più portatili. è possibile utilizzare solo un campo, nella maggior parte dei casi: INTEGER time_created NOT NULL
(più campi nella riga del database sono l'unico lato negativo di questa soluzione che ho trovato e che non causa tanti mal di testa o tazze di caffè :)
Le funzioni di data di php sono eccezionali per confrontare le date, ma in mysql o postgresql, confrontando le date? nah .. usa il confronto intero in sql
mi rendo conto che può SEMERE più facile usare CURRENT_TIMESTAMP su una funzione di inserimento. HA! non farti ingannare.
Non puoi fare DELETE FROM SESSION_TABLE WHERE time-initialized < '2 days'
se time-inizialized è un timestamp postgresql. ma si può fare:
DELETE FROM SESSION_TABLE WHERE time_initialized < '$yesterday'
Finché si imposta $ ieri a PHP come il numero intero di secondi dal 1970 che ieri era.
Questa è una gestione più semplice dei record di sessione rispetto al confronto di timestamp nelle istruzioni di selezione postgresql.
SELECT age(), SELECT extract() e asbtime sono mal di testa in uno di essi. questa è solo la mia opinione
si può fare addizione, sottrazione, <,>, il tutto con la data php oggetti
_peter_sysko U4EA Networks, Inc.
Questo è davvero il più vicino. Eliminare tutti i decimali non dovrebbe essere un problema, anche se sono piuttosto rattristato dalla mancanza di una funzione incorporata per fare questo come MySQL. – TheLizardKing
Non ci dovrebbero essere decimali, poiché eseguirà la divisione in interi. – araqnid
araqnid, lo pensavo anche io, ma ho appena provato e in effetti produce un float. –