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

Requêtes MySQL Discussion :

Changer des valeurs en fonction d'une date


Sujet :

Requêtes MySQL

  1. #1
    Membre averti
    Inscrit en
    Mars 2004
    Messages
    1 907
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 1 907
    Points : 411
    Points
    411
    Par défaut Changer des valeurs en fonction d'une date
    Bonjour,
    j'ai une table qui contient des date de début et des ate de fin :

    par exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
    date_deb = 2011-07-15
     
    date_fin = 2011-07-22
    j'aimerais changer dans ma table toute les dates inférieures à 2016 en

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
    date_deb = 0000-00-00
     
    date_fin = 0000-00-00
    Merci d'avance pour votre aide.

  2. #2
    Membre confirmé Avatar de Sebwar
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2012
    Messages
    172
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2012
    Messages : 172
    Points : 498
    Points
    498
    Par défaut
    Hello !

    Ou est-ce que tu rencontres un problème ? un simple update ne suffit pas ?

  3. #3
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 381
    Points : 19 065
    Points
    19 065
    Par défaut
    Salut à tous.

    @ Sebwar : le problème n'est peut-être pas dans l'usage du "update", mais dans la fonction "year()", comme dans mon exemple.
    Ou encore, dans une année à "0000-00-00". En effet, depuis la version MySql 5.7, il n'est plus possible, par défaut de mettre des année à "0000-00-00".
    Il faut préciser dans la variable "sql_mode" ==> "ALLOW_INVALID_DATES".
    Pour plus d'explication, lire ce lien : http://dev.mysql.com/doc/refman/5.7/en/sql-mode.html
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    --------------
    SET AUTOCOMMIT = 0
    --------------
     
    --------------
    START TRANSACTION
    --------------
     
    --------------
    set sql_mode = "ALLOW_INVALID_DATES"
    --------------
     
    --------------
    DROP DATABASE IF EXISTS `base`
    --------------
     
    --------------
    CREATE DATABASE `base`
        DEFAULT CHARACTER SET `latin1`
        DEFAULT COLLATE       `latin1_general_ci`
    --------------
     
    --------------
    drop table if exists `test`
    --------------
     
    --------------
    CREATE TABLE `test`
    ( `id`    integer unsigned NOT NULL auto_increment,
      `date`  date             NOT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB
      DEFAULT CHARSET=`latin1` COLLATE=`latin1_general_ci`
      ROW_FORMAT=COMPRESSED
    --------------
     
    --------------
    insert into `test` (`date`) values
      ('2016-01-05'), ('2015-05-12'), ('2014-02-01'), ('2015-12-31'), ('2016-03-21')
    --------------
     
    --------------
    select * from test
    --------------
     
    +----+------------+
    | id | date       |
    +----+------------+
    |  1 | 2016-01-05 |
    |  2 | 2015-05-12 |
    |  3 | 2014-02-01 |
    |  4 | 2015-12-31 |
    |  5 | 2016-03-21 |
    +----+------------+
    --------------
    update test set date = '0000-00-00'
    where year(date) < '2016'
    --------------
     
    --------------
    select * from test
    --------------
     
    +----+------------+
    | id | date       |
    +----+------------+
    |  1 | 2016-01-05 |
    |  2 | 0000-00-00 |
    |  3 | 0000-00-00 |
    |  4 | 0000-00-00 |
    |  5 | 2016-03-21 |
    +----+------------+
    --------------
    COMMIT
    --------------
     
    --------------
    SET AUTOCOMMIT = 1
    --------------
     
     
    Appuyez sur une touche pour continuer...
    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

  4. #4
    Membre averti
    Inscrit en
    Mars 2004
    Messages
    1 907
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 1 907
    Points : 411
    Points
    411
    Par défaut
    Citation Envoyé par Sebwar Voir le message
    Hello !

    Ou est-ce que tu rencontres un problème ? un simple update ne suffit pas ?
    Bonjour, je suis vraiment désolé pour le retard.

    En fait, la difficulté c'est que mes dates "renseignées" ne sont jamais les mêmes. Et j'aimerais changer tout ce qui est inférieur à 2016 (toutes les années 2015 et antérieures" à une valeur unique qui est :

    0000-00-00

  5. #5
    Membre confirmé Avatar de Sebwar
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2012
    Messages
    172
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2012
    Messages : 172
    Points : 498
    Points
    498
    Par défaut
    Si je comprends bien cette requête devrait suffire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UPDATE ta_table SET ton_champ_date = '0000-00-00' WHERE ton_champ_date < '2016-01-01'

  6. #6
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 381
    Points : 19 065
    Points
    19 065
    Par défaut
    Salut sam01.

    En quoi mon exemple ne vous convient pas ?
    Cela fait exactement ce que vous avez demandé, à savoir modifier les lignes de vos tables dont l'année est inférieure à 2016.

    Citation Envoyé par sam01
    En fait, la difficulté c'est que mes dates "renseignées" ne sont jamais les mêmes.
    Pourriez-vous être plus explicite sur votre phrase ci-dessus ?

    Vous voulez dire que vous devez forcer vos dates à '0000-00-00' quand justement la valeur est aussi à null.

    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

  7. #7
    Membre averti
    Inscrit en
    Mars 2004
    Messages
    1 907
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 1 907
    Points : 411
    Points
    411
    Par défaut
    Salut Artemus24,

    oups désolé

    je n'ai pas déscendu la scroll bar....


    Un grand merci.

  8. #8
    Membre averti
    Inscrit en
    Mars 2004
    Messages
    1 907
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 1 907
    Points : 411
    Points
    411
    Par défaut
    du coup ça me génère un problème.
    Après update des valeur, la requêtes suivante me renvoie aucune ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    $sqly =$db->prepare("SELECT D.id_des, D.id_adh, D.continent, D.pays, D.ville, D.autre, D.date_deb, D.date_fin 
    FROM flatforswap_destination D 
    INNER JOIN flatforswap_adherent E ON E.id_adh = D.id_adh
    WHERE D.id_adh=?  AND E.valide =? ORDER BY timestamp ASC");
     
    $sqly->execute(array($id, "1"));
     
     
    $nbrdes = $sqly->rowCount();
    alors que celle-ci fonctionne bien (comme avant l'update) elle me renvoie bien des lignes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $sqld =$db->prepare("SELECT id_des,continent,pays,ville,autre,date_deb,date_fin FROM flatforswap_destination WHERE id_adh=? ORDER BY timestamp ASC");
    $sqld->execute(array($id_adh));
    $nbrdes = $sqld->rowCount();

  9. #9
    Membre averti
    Inscrit en
    Mars 2004
    Messages
    1 907
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 1 907
    Points : 411
    Points
    411
    Par défaut
    Ben non en fait. C'est un problème que j'avais déjà auparavant...

    du coup ce n'est pas le sujet, mais je ne sais pas d'où vient le problème. C'est certainement dû à mon passage en PDO...

  10. #10
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 381
    Points : 19 065
    Points
    19 065
    Par défaut
    Salut sam01.

    Dans votre première tentative qui fonctionne, vous avez mis ceci :
    Citation Envoyé par sam01
    $sqld->execute(array($id_adh));
    Dans votre seconde tentative qui ne fonctionne pas, vous avez mis cela :
    Citation Envoyé par sam01
    $sqly->execute(array($id, "1"));
    Je constate que vous ne fournissez pas la même variable dans vos deux exemples.
    Est-ce que $id existe et est bien renseigné ?

    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

  11. #11
    Membre averti
    Inscrit en
    Mars 2004
    Messages
    1 907
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 1 907
    Points : 411
    Points
    411
    Par défaut
    Je viens de trouver, c'est la valeur 1 qui n'était pas bonne.
    Maintenant tout fonctionne nickel.

    merci encore.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 13/06/2013, 09h14
  2. [AC-2010] Limiter des résultats en fonction d'une date dans un entête de formulaire
    Par docjo dans le forum Requêtes et SQL.
    Réponses: 8
    Dernier message: 25/04/2013, 20h18
  3. Zedgraph valeur en fonction d'une date
    Par petitours dans le forum C#
    Réponses: 8
    Dernier message: 07/06/2010, 09h34
  4. Supprimer des fichiers en fonction d'une date
    Par Sh4dow49 dans le forum Administration système
    Réponses: 1
    Dernier message: 02/06/2009, 22h36

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