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

Contribuez MySQL Discussion :

La FAQ MySQL - commentaires & suggestions


Sujet :

Contribuez MySQL

  1. #41
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 048
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 048
    Points : 23 810
    Points
    23 810
    Par défaut
    Bonjour,

    Merci de cette proposition.
    Nous sommes effectivement preneurs de toute contribution, notamment à la FAQ.
    L'avantage du forum, c'est que tout le monde peut réagir et ainsi compléter ta proposition initiale (notamment sur d'autres OS), jusqu'à obtenir une définition la plus précise possible.
    N'hésite donc pas à poster ta proposition de définition à la suite.

    Encore merci,

    ced

  2. #42
    Membre habitué

    Inscrit en
    Février 2004
    Messages
    342
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 342
    Points : 197
    Points
    197
    Par défaut
    ok je vais essayer de rédiger une proposition donc.

  3. #43
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 15
    Points : 19
    Points
    19
    Par défaut
    Je propose d'ajouter ce post dans la FAQ car il s'agit d'un problème classique sur lequel je ne trouvais pas de solution. Encore merci à Antoun et Oishiiii pour leur aide.

    La rédaction pourrait être la suivante :


    On cherche à lister les employés du service S1 qui n'ont pas suivi de formations en 2010.

    Les tables :
    - employes avec les champs : id_employe, nom, service
    - formations avec les champs : id_formation, formation, id_employe, annee

    La requête suivante fournit la liste les employés du service S1 qui n'ont jamais suivi de formations :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT  e.nom, e.service, f.formation, f.annee
    FROM employes e
    LEFT JOIN formations f
    ON e.id_employe = f.id_employe
    WHERE f.formation IS NULL
    AND e.service = 'S1'
    La requête suivante fournit la liste les employés du service S1 qui n'ont pas suivi de formations en 2010 (compatible toutes versions) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT  e.nom, e.service, f.formation, f.annee
    FROM employes e
    LEFT JOIN formations f
      ON e.id_employe = f.id_employe AND  f.annee = '2010'
    WHERE f.formation IS NULL
    AND e.service = 'S1'
    La requête suivante fournit la liste les employés du service S1 qui n'ont pas suivi de formations en 2010 (compatible MySQL 4.1 et supérieures) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT id_employe, nom
    FROM employes AS e
    WHERE service = 'S1'
    AND NOT EXISTS (
      SELECT *
      FROM formations AS f
      WHERE annee = '2010'
          AND f.id_employe = e.id_employe
    )
    Les exemples ci-dessus concernent des employés et des formations mais ils peuvent bien sûr être adaptés à tout type de cas.

  4. #44
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Août 2010
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 1
    Points : 1
    Points
    1
    Par défaut à propos du GROUP_CONCAT
    Bonjour, je lisais la FAQ sur la partie du GROUP_CONCAT
    je sais pas pour vous, mais chez moi la requête telle que proposée dans la FAQ ne fonctionne pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    GROUP_CONCAT(NOM_USER SEPARATOR ":" ORDER BY NOM_USER)
    en fait l'ordre des champs est dans le mauvais ordre, c'est bien :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    GROUP_CONCAT(NOM_USER ORDER BY NOM_USER SEPARATOR ":")
    -> cf. http://dev.mysql.com/doc/refman/5.0/...n_group-concat

  5. #45
    Membre émérite
    Avatar de gene69
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 769
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 769
    Points : 2 446
    Points
    2 446
    Par défaut
    la 2e solution pour la question "que faire quand on a perdu son mot de passe" est cocasse.

  6. #46
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 048
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 048
    Points : 23 810
    Points
    23 810
    Par défaut
    Oooops...
    Il y a effectivement une petite coquille dans le titre de la deuxième question.
    Merci de l'avoir signalée : je la corrige dans les plus brefs délais.

    ced

  7. #47
    Membre éclairé
    Avatar de hornetbzz
    Homme Profil pro
    Directeur commercial
    Inscrit en
    Octobre 2009
    Messages
    482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France

    Informations professionnelles :
    Activité : Directeur commercial

    Informations forums :
    Inscription : Octobre 2009
    Messages : 482
    Points : 773
    Points
    773
    Par défaut FAQ upsert
    Pour ne rien avoir trouvé sur l'upsert dans la FAQ, j'ai peut être mal cherché.

    Sinon, un petit ajout serait utile car il me semble que c'est un point plutôt classique pour les bdd.

    Je ne maitrise pas suffisamment SQL pour faire une proposition complète d'un panorama de solutions (insert/onduplicate key, replace, merge...), mais déjà avec le couple "insert/onduplicate key", ça serait déjà pas mal.

    Voir ce post en exemple possible.

  8. #48
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 285
    Points : 11 740
    Points
    11 740
    Par défaut
    MySQL ne connaît ni MERGE, ni UPSERT.

    Il y a deux solutions, le REPLACE et le INSERT... ON DUPLICATE KEY UPDATE. Elles sont pas mal décrites dans mon post ici, qui pourrait servir de base à une entrée de FAQ :


    Tu as deux possibilités, qui supposent toutes les deux une clé primaire ou unique sur le nom.

    Si je suppose que ta table est comme ça :

    ta_table(nom UNIQUE KEY, couleur, taille) ;
    1) le REPLACE est une combinaison de DELETE et INSERT. Donc l'ordre suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    REPLACE INTO ta_table (nom, couleur)
    VALUES ('toto', 'bleu') ;
    va insérer une ligne toto si elle n'existe pas déjà, ou bien supprimer la ligne toto existante et insérer la nouvelle ligne à la place. Dans ce dernier cas, l'info sur la taille, qui n'est pas dans la requête de remplacement, sera perdue.

    2) le ON DUPLICATE KEY permet de combiner un INSERT avec un UPDATE. Exemple équivalent :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    INSERT INTO ta_table (nom, couleur)
    VALUES ('toto', 'bleu')
    ON DUPLICATE KEY UPDATE couleur = 'bleu'
    Avec les deux syntaxes, tu peux savoir ce qui s'est passé en regardant le myslq_affected_rows(). Si c'est 1, ça veut dire qu'il y a eu une insertion simple, si c'est 2, ça veut dire que la ligne existait déjà.
    http://www.developpez.net/forums/d10...e/#post5791766

  9. #49
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 048
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 048
    Points : 23 810
    Points
    23 810
    Par défaut
    Question : comment mettre à jour une table à partir des données issues d'une autre table ?
    Réponse : MySQL permet de faire des mises à jour à l'aide de jointures dans la commande UPDATE, selon la syntaxe suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    UPDATE table1 t1
    INNER JOIN table2 t2 ON condition_de_jointure
    SET t1.une_colonne = une_nouvelle_valeur
    WHERE conditions_de_restriction
    La nouvelle valeur peut être issue d'une colonne de table2.

Discussions similaires

  1. Nouvelle FAQ OpenGL en ligne : commentaires et suggestions
    Par LittleWhite dans le forum OpenGL
    Réponses: 7
    Dernier message: 02/05/2016, 20h54
  2. Réponses: 14
    Dernier message: 22/03/2013, 22h13
  3. Nouvelle FAQ DirectX en ligne : commentaires et suggestions
    Par LittleWhite dans le forum DirectX
    Réponses: 5
    Dernier message: 13/10/2009, 10h26
  4. les sources MySQL - commentaires & suggestions
    Par Alain Defrance dans le forum Contribuez
    Réponses: 0
    Dernier message: 21/11/2008, 13h22
  5. Nouvelle FAQ Prog 3D en ligne : commentaires et suggestions
    Par LittleWhite dans le forum Développement 2D, 3D et Jeux
    Réponses: 7
    Dernier message: 20/08/2008, 20h50

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