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 :

Valeur par défaut égale à une autre colonne


Sujet :

Requêtes MySQL

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 66
    Points : 30
    Points
    30
    Par défaut Valeur par défaut égale à une autre colonne
    * MySQL: 5.0.51a
    phpMyAdmin * Version: 3.1.5

    Bonjour,

    J'ai créé une table contenant les données type date 'debut' et 'fin'. Elles ont par defaut la valeur 0000-00-00. J'aurais voulu que la valeur par défaut de 'fin' soit égale à 'debut' . Est-ce possible ? Peut-on dans ce cas modifier la structure maintenant que la table contient des enregistrements ?

    Pour rattraper le coup, je voudrais maintenant modifier les enreg.
    J'ai essayé ça :
    [`fetes`.`fetes1`] SELECT if(`fin`=0000-00-00,`debut`,`fin`) FROM `fetes1`
    je n'obtiens qu'une liste des valeurs effectivement modifiées mais les enregistrements eux ne sont pas modifiés. (Je n'ose pas trop bidouiller de peur de détruire la table et ses 250 enreg.)

    Merci pour vos conseils
    Alain

  2. #2
    Membre éclairé
    Inscrit en
    Septembre 2006
    Messages
    685
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 685
    Points : 658
    Points
    658
    Par défaut
    B'soir,

    Si tu as peur de faire une bêtise sur ta table en faisant des requêtes de test, tu peux créer une table temporaire de même structure et y insérer les données de ta table de base

    Sinon, la solution à ton problème est simple, tu ne fais pas d'update, normal que rien ne soit modifié.

    Si j'ai bien saisi, seules les valeurs fin possédant une date à 0000-00-00 doivent-être remplacées par la valeur de début.

    Cela donnerait donc :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UPDATE fetes1 SET fin = debut WHERE fin = '0000-00-00';
    Pour la modification de la structure de ta table, en général cela est possible, faudrait voir ce que tu désires modifier.

  3. #3
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 281
    Points : 11 737
    Points
    11 737
    Par défaut
    Pour l'avenir, il faut faire en sorte que la date de fin soit par défaut égale à la date de début ; cela se met en place avec deux triggers :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    CREATE TRIGGER ta_table_BI BEFORE INSERT ON ta_table
    FOR EACH ROW
    SET new.fin = COALESCE(NULLIF(new.fin, 0), new.debut) ;
     
    CREATE TRIGGER ta_table_BU BEFORE UPDATE ON ta_table
    FOR EACH ROW
    SET new.fin = COALESCE(NULLIF(new.fin, 0), new.debut) ;
    Antoun
    Expert Essbase, BO, SQL

    La bible d'Essbase, 2ème édition

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 66
    Points : 30
    Points
    30
    Par défaut
    Super ! Tout est daté proprement ! et merci.

    Pour modifier la structure, voici ce que j'ai pour le moment :
    _________________________________________________________________
    CHAMP TYPE NUL DEFAUT
    --------------------------------------------------------------------------
    numero int(11) Non 0
    debut date Non 0000-00-00
    fin date Non 0000-00-00
    jourdeb varchar(27) Non
    jourfin varchar(27) Non
    lieu enum('','AINHARP','ALCAY-ALCABEHETY-SUNHARETTE','ALOS-SIBAS-ABENSE',.. Non Aucune
    .................
    ________________________________________________________________

    Je voudrais que la valeur par défaut du champ 'fin' soit égale à celle de 'debut' pour éviter de taper deux fois la même date lorsque la manifestation ne dure qu'un jour (ma base est accessible ici : http://autourdalos.fr/html/fetesannee1.php )

    Ce qui serait chouette aussi serait de transformer automatiquement le format date '2009-06-27' en 'samedi 27 juin 2009' (ce que je fais à la main pour 'jourdeb' ) mais c'est peut-être trop demander à mysql

  5. #5
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    La valeur par défaut telle que tu la souhaite n'est réalisable que par la création des TRIGGER tels que les a décrits Antoun.

    Quand au format de la date, c'est le format normalisé et le triturage de cette date est possible avec des fonctions de date telles que DATE_FORMAT.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 66
    Points : 30
    Points
    30
    Par défaut
    Je viens de copier la table (on ne sait jamais !) et j'ai lancé le code de création des deux triggers...

    requête SQL:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    CREATE TRIGGER fetes1_BI BEFORE INSERT ON fetes1
    FOR EACH
    ROW
    SET new.fin = COALESCE( NULLIF( new.fin, 0 ) , new.debut ) ;
    MySQL a répondu ocumentation
    #1227 - Access denied; you need the SUPER privilege for this operation


    Que faire ?

  7. #7
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 281
    Points : 11 737
    Points
    11 737
    Par défaut
    Citation Envoyé par jarailet Voir le message
    Que faire ?
    Qui est l'administrateur de ta base ?
    Antoun
    Expert Essbase, BO, SQL

    La bible d'Essbase, 2ème édition

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 66
    Points : 30
    Points
    30
    Par défaut
    ????
    j'ai suivi les indications sur MySql pour créer une base chez mon hebergeur. Je ne me rappelle pas avoir déclaré d'administrateur... Peut-on retrouver ça qq part ?

  9. #9
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 281
    Points : 11 737
    Points
    11 737
    Par défaut
    Bon, j'en déduis que ton hébergeur ne t'accorde pas le privilège de créer des triggers...
    Antoun
    Expert Essbase, BO, SQL

    La bible d'Essbase, 2ème édition

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 66
    Points : 30
    Points
    30
    Par défaut
    Je me renseigne ... et je reviens dans un autre fil.
    Merci.

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 66
    Points : 30
    Points
    30
    Par défaut
    Réponse de mon hébergeur : pas droit aux super-privilèges.

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

Discussions similaires

  1. alter table : valeur par défaut d'une autre colonne
    Par gangsoleil dans le forum SQL
    Réponses: 4
    Dernier message: 28/03/2013, 17h17
  2. valeur par défaut d'une colonne
    Par nabil148911 dans le forum Oracle
    Réponses: 5
    Dernier message: 06/08/2007, 15h52
  3. Réponses: 2
    Dernier message: 28/05/2007, 09h28
  4. Trigger : Récupérer la valeur par défaut d'une colonne
    Par mcspr2002 dans le forum Administration
    Réponses: 5
    Dernier message: 12/01/2007, 13h53
  5. Réponses: 2
    Dernier message: 06/07/2004, 17h46

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