MySQL : transformer une valeur en colonne

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : MySQL : transformer une valeur en colonne

par abelthorne » 09 mars 2009, 01:53

À priori, non : je gère un certain nombre de "tags" qui ne sont absolument pas fixes (là, j'ai donné l'exemple de trois tags : prénom, nom et téléphone, mais il pourrait y en avoir 50 et pas forcément fixés à l'avance).

Là, j'ai 3 lignes par user_id/vcard_id et je voudrais que ça donne une seule ligne avec 3 nouvelles colonnes en faisant une transformation sur tag_name/tag_value.
Si j'avais 12 lignes par user_id/vcard_id (parce que j'ai rajouté des éléments dans la table tags), il faudrait que ça donne automatiquement une ligne avec 12 nouvelles colonnes.

Le but est vraiment de transformer des valeurs en clés en modifiant la structure de la table à la volée pour la requête : est-ce qu'il y a des options de SELECT qui le permettent ? Personnellement, je ne pense pas que ce soit possible, mais on sait jamais. ;)

par Albat90 » 09 mars 2009, 01:40

Salut,

Et si tu essaye de faire une jointure manuelle?
Enfin, ce que je veux dire par là c'est une requête dans se style :

Code : Tout sélectionner

SELECT user_id, U.vcard_id, tag_name as nom, tag_value as prenom FROM users U, tags T WHERE U.vcard_id = T.vcard_id;
Albat90 ;)

MySQL : transformer une valeur en colonne

par abelthorne » 09 mars 2009, 00:24

Bonsoir,
J'ai une requête MySQL qui effectue une jointure sur deux tables.

Première table (users) : user_id et vcard_id
Deuxième table (tags) : tag_id, vcard_id, tag_name et tag_value
La jointure se fait sur vcard_id via la requête SELECT bp.*,bt.tag_name,bt.tag_value FROM users bp LEFT JOIN tags bt ON bp.vcard_id=bt.vcard_id

Le résultat de la jointure est le suivant :

Code : Tout sélectionner

user_id vcard_id tag_name tag_value ------------------------------------- 1 2 prenom bob 1 2 nom dupont 1 2 telephone 1234567890 2 3 prenom nicolas 2 3 nom durand 2 3 telephone 1209876543
Je voudrais modifier la requête pour transformer les colonnes tag_name et tag_value en leurs valeurs. Je ne sais pas si mon explication est très claire, mais je voudrais obtenir la table suivante au lieu de celle ci-dessus :

Code : Tout sélectionner

user_id vcard_id prenom nom telephone ------------------------------------------ 1 2 bob dupont 1234567890 2 3 nicolas durand 1209876543
Est-ce que c'est possible ?