Publicité
+ Répondre à la discussion Actualité déjà publiée
Page 3 sur 3 PremièrePremière 123
Affichage des résultats 41 à 49 sur 49
  1. #41
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro Cédric Duprez
    Gestion de bases de données techniques
    Inscrit en
    avril 2002
    Messages
    5 103
    Détails du profil
    Informations personnelles :
    Nom : Homme Cédric Duprez
    Âge : 39
    Localisation : France, Loiret (Centre)

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

    Informations forums :
    Inscription : avril 2002
    Messages : 5 103
    Points : 17 458
    Points
    17 458

    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
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

  2. #42
    Membre actif

    Inscrit en
    février 2004
    Messages
    343
    Détails du profil
    Informations forums :
    Inscription : février 2004
    Messages : 343
    Points : 165
    Points
    165

    Par défaut

    ok je vais essayer de rédiger une proposition donc.

  3. #43
    Futur Membre du Club
    Inscrit en
    juin 2004
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : juin 2004
    Messages : 15
    Points : 17
    Points
    17

    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 :
    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 :
    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 :
    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
    Invité de passage
    Inscrit en
    août 2010
    Messages
    1
    Détails du profil
    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 :
    GROUP_CONCAT(NOM_USER SEPARATOR ":" ORDER BY NOM_USER)
    en fait l'ordre des champs est dans le mauvais ordre, c'est bien :

    Code :
    GROUP_CONCAT(NOM_USER ORDER BY NOM_USER SEPARATOR ":")
    -> cf. http://dev.mysql.com/doc/refman/5.0/...n_group-concat

  5. #45
    Membre Expert
    Avatar de gene69
    Profil pro
    Inscrit en
    janvier 2006
    Messages
    1 633
    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 633
    Points : 2 122
    Points
    2 122

    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 Cédric Duprez
    Gestion de bases de données techniques
    Inscrit en
    avril 2002
    Messages
    5 103
    Détails du profil
    Informations personnelles :
    Nom : Homme Cédric Duprez
    Âge : 39
    Localisation : France, Loiret (Centre)

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

    Informations forums :
    Inscription : avril 2002
    Messages : 5 103
    Points : 17 458
    Points
    17 458

    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
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

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

    Informations professionnelles :
    Activité : Directeur commercial

    Informations forums :
    Inscription : octobre 2009
    Messages : 482
    Points : 741
    Points
    741

    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 Antoine Dinimant
    Architecte décisionnel
    Inscrit en
    octobre 2006
    Messages
    5 957
    Détails du profil
    Informations personnelles :
    Nom : Homme Antoine Dinimant
    Âge : 44
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : octobre 2006
    Messages : 5 957
    Points : 10 765
    Points
    10 765

    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 :
    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 :
    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
    Antoun
    Expert Essbase, BO, SQL

    La bible d'Essbase est parue !

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

    Avatar de ced
    Homme Profil pro Cédric Duprez
    Gestion de bases de données techniques
    Inscrit en
    avril 2002
    Messages
    5 103
    Détails du profil
    Informations personnelles :
    Nom : Homme Cédric Duprez
    Âge : 39
    Localisation : France, Loiret (Centre)

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

    Informations forums :
    Inscription : avril 2002
    Messages : 5 103
    Points : 17 458
    Points
    17 458

    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 :
    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.
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •