IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SQL Procédural MySQL Discussion :

TIMESTAMP


Sujet :

SQL Procédural MySQL

  1. #1
    Membre éprouvé
    Avatar de Anduriel
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Février 2004
    Messages
    2 290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration

    Informations forums :
    Inscription : Février 2004
    Messages : 2 290
    Par défaut TIMESTAMP
    Salut,

    J'utilisais toujours les fonctions primaires MySQL (Select...etc). Mais là je souhaite utiliser UNIX_TIMESTAMP() et je ne vois pas comment l'utiliser.

    J'ai un variable $x = 60; (secondes)
    Je souhaite ajouter $x au unix_timestamp() et l'insérer dans une bdd mais je ne connais pas la syntaxe appropriée

    $sql = "UPDATE `gdn-table` SET timestamp=UNIX_TIMESTAMP()+".$x;
    ?
    Merci à vous.

  2. #2
    Rédacteur
    Avatar de pcaboche
    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    2 785
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Singapour

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 785
    Par défaut
    UNIX_TIMESTAMP convertit une date en timestamp Unix (nombre de secondes depuis le 1970-01-01 00:00:00)

    FROM_UNIXTIME fait l'opération inverse

    Si tu peux, utilises la fonction DATE_ADD ou ADDTIME.

    Pour avoir la date-heure courante, c'est NOW()

    Voici un exemple d'utilisation des UNIXTIME:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    UPDATE `gdn-table`
    SET timestamp=FROM_UNIXTIME(UNIX_TIMESTAMP(NOW()) + $x)
    Mais je pense qu'il vaut mieux utiliser les fonctions DATE_ADD ou ADDTIME (cf. manuel de MySQL). Ca dépend aussi de ce que tu veux faire et du type de tes champs (DATETIME, TIMESTAMP...).
    "On en a vu poser les armes avant de se tirer une balle dans le pied..."
    -- pydévelop

    Derniers articles:

    (SQL Server) Introduction à la gestion des droits
    (UML) Souplesse et modularité grâce aux Design Patterns
    (UML) Le Pattern Etat
    Autres articles...

  3. #3
    Membre éprouvé
    Avatar de Anduriel
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Février 2004
    Messages
    2 290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration

    Informations forums :
    Inscription : Février 2004
    Messages : 2 290
    Par défaut
    Merci
    Mais pour la fonction ADD_TIME(), mon champ peut-il (ou doit être) de type TIMESTAMP, DATE ?
    Car pour moi timestamp correspond à un nombre de secondes mais dans ma bdd ça se présente sous la forme su'une date normale

    Merci

  4. #4
    Membre éprouvé
    Avatar de Anduriel
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Février 2004
    Messages
    2 290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration

    Informations forums :
    Inscription : Février 2004
    Messages : 2 290
    Par défaut
    En fait j'ai un problème:
    J'ai un champ TIMESTAMP.
    Je fais une requête avec le console MySQL:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    UPDATE table
    SET timestamp=NOW()+120
    et ça fonctionne (2 minutes sont ajoutées).

    En php je fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $add_time = 120;
    $db->query("UPDATE table SET timestamp=NOW()+".$add_time);
    Mon champ timestamp devient 000-00-00 00:00:00

  5. #5
    Rédacteur
    Avatar de pcaboche
    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    2 785
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Singapour

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 785
    Par défaut
    Cette manière de faire n'est pas du tout correcte.

    Imaginons que je veuille rajouter 2 heures (7200 secondes) à l'heure actuelle. A titre de comparaison, je vais aussi mettre l'heure actuelle. Ma requête est donc la suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT NOW(), NOW()+7200
    Et a pour résultat:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
           NOW()        |   NOW()+7200
    ---------------------------------------
    2006-01-01 16:01:28 | 20060101167328

    Comme tu peux le remarquer, NOW()+7200 renvoie la date "2006-01-01 16:73:28", qui n'est pas une date correcte !

    En fait, voilà ce qu'il se passe: NOW() renvoie une date, converti en entier dans le format YYYYMMDDHHMMSS. Quand tu fais l'addition, cela peux te sortir un chiffre qui correspond à une date invalide et sera évaluée en 0000-00-00 00:00:00 (avec 7200, la date est toujours invalide. Avec 120, ça dépend de l'heure à laquelle tu lances ta requête !)

    Pour faire ce que tu veux faire, il faut passer par les fonctions sur les UNIXTIME, comme ce que je te l'ai préconisé au début...

    (Avis à la population: il semble y avoir une maladie contagieuse en ce moment chez les forumeurs. Les symptômes: ils n'écoutent pas ce qu'on leur dit, n'en font qu'à leur tête et se plaignent ensuite que ça marche pas... Les effets secondaires peuvent être très graves: risques d'énervements de la part de pcaboche (le type qui essaye d'aider), qui est alors obligé de rendre des comptes à la rédaction de DVP)
    "On en a vu poser les armes avant de se tirer une balle dans le pied..."
    -- pydévelop

    Derniers articles:

    (SQL Server) Introduction à la gestion des droits
    (UML) Souplesse et modularité grâce aux Design Patterns
    (UML) Le Pattern Etat
    Autres articles...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. de char à timestamp
    Par imtinene dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 13/05/2004, 17h01
  2. [struts][validation][Timestamp] comment faire?
    Par anas.rih dans le forum Struts 1
    Réponses: 6
    Dernier message: 16/04/2004, 23h59
  3. Réponses: 4
    Dernier message: 06/02/2004, 16h23
  4. Conversion Timestamp vers varchar
    Par stejutt dans le forum SQL
    Réponses: 4
    Dernier message: 08/01/2004, 08h46
  5. recuperation du mois avec un timestamp
    Par matrxjean1984 dans le forum Requêtes
    Réponses: 3
    Dernier message: 16/10/2003, 14h41

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo