Précédent   Forum du club des développeurs et IT Pro > Bases de données > MySQL > Contribuez
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Actualité déjà publiée
 
Outils de la discussion
Publicité
'
Vieux 03/08/2009, 15h32   #41
ced
Rédacteur/Modérateur

 
Avatar de ced
 
Homme Cédric Duprez
Inscription : avril 2002
Messages : 4 061
Détails du profil
Informations personnelles :
Nom : Homme Cédric Duprez
Âge : 37
Localisation : France, Loiret (Centre)

Informations professionnelles :
Secteur : Agroalimentaire - Agriculture

Informations forums :
Inscription : avril 2002
Messages : 4 061
Points : 8 918
Points : 8 918
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
Mes tutoriels et la FAQ MySQL

----------------------------------------------------
Pensez aux balises code et au tag
Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça
ced est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/08/2009, 16h50   #42
fourchette
Membre habitué
 
Inscription : février 2004
Messages : 342
Détails du profil
Informations forums :
Inscription : février 2004
Messages : 342
Points : 148
Points : 148
ok je vais essayer de rédiger une proposition donc.
fourchette est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/03/2010, 10h49   #43
Zane
Candidat au titre de Membre du Club
 
Inscription : juin 2004
Messages : 15
Détails du profil
Informations forums :
Inscription : juin 2004
Messages : 15
Points : 13
Points : 13
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.
Zane est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/08/2010, 09h57   #44
beb0p
Invité de passage
 
Inscription : 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
beb0p est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/10/2010, 14h27   #45
gene69
Membre Expert
 
Avatar de gene69
 
Inscription : janvier 2006
Messages : 1 626
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 626
Points : 1 992
Points : 1 992
la 2e solution pour la question "que faire quand on a perdu son mot de passe" est cocasse.
gene69 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/10/2010, 20h14   #46
ced
Rédacteur/Modérateur

 
Avatar de ced
 
Homme Cédric Duprez
Inscription : avril 2002
Messages : 4 061
Détails du profil
Informations personnelles :
Nom : Homme Cédric Duprez
Âge : 37
Localisation : France, Loiret (Centre)

Informations professionnelles :
Secteur : Agroalimentaire - Agriculture

Informations forums :
Inscription : avril 2002
Messages : 4 061
Points : 8 918
Points : 8 918
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
Mes tutoriels et la FAQ MySQL

----------------------------------------------------
Pensez aux balises code et au tag
Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça
ced est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/03/2011, 09h40   #47
hornetbzz
Membre chevronné
 
Avatar de hornetbzz
 
Homme
Directeur commercial
Inscription : octobre 2009
Messages : 481
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 45
Localisation : France

Informations professionnelles :
Activité : Directeur commercial

Informations forums :
Inscription : octobre 2009
Messages : 481
Points : 719
Points : 719
Envoyer un message via Skype™ à hornetbzz
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.
hornetbzz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/03/2011, 12h30   #48
Antoun
Rédacteur/Modérateur
 
Avatar de Antoun
 
Homme Antoine Dinimant
Consultant en Business Intelligence
Inscription : octobre 2006
Messages : 5 877
Détails du profil
Informations personnelles :
Nom : Homme Antoine Dinimant
Âge : 43
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Consultant en Business Intelligence
Secteur : Conseil

Informations forums :
Inscription : octobre 2006
Messages : 5 877
Points : 10 330
Points : 10 330
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 :

Citation:

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 :

Citation:
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 !
Antoun est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Actualité déjà publiée
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 18h34.


 
 
 
 
Partenaires

Hébergement Web