Salut,
J’ai un problème un peu spécial.
J’ai des informations dans plusieurs colonnes de plusieurs tables.
J’aimerais sélectionner les informations en fonction du type des données (type qui peut changer)
Je vais essayer de faire un exemple
table principale
------------------------------------
|serial_number | chemin |
------------------------------------
| 12345 | hello |
------------------------------------
| 6789 | bonjour |
------------------------------------
table des données
---------------------------------------------
| serial_number | hello | bonjour |
---------------------------------------------
| 12345 | data | null |
---------------------------------------------
| 6789 | null | data |
---------------------------------------------
Le but est donc de sélectionner les données dans leur bonne colonne, en fonction de leur “chemin” contenu dans la table principale.
Ceci est un exemple, et mon problème est un peu plus complexe. Je dois vraiment pouvoir sélectionner la bonne colonne “dynamiquement”. Pas de IFNULL ou bidouille dans le genre
J’espère que quelqu’un pourra m’aider ! (ou me convaincre que c’est impossible )
Merci !
Edité le 07/09/2007 à 10:20
Désolé pour la mise en page, vive le nouveau forum :/
Tu as CASE si tu veux remplacer IFNULL… et COALESCE pour remplacer IFNULL tout court, surtout COALESCE (qui te renvoie le premier argument non NULL).
Voire une sous requête?
bidouille dans le genre… je crois que c’est impossible en SQL pur, tu ne veux pas le faire dans un langage de prog, ou en PL-SQL?
Mais je n suis pas sur de comprendre, il faudrait un peu plus de données et des types réels: hello et bonjour sont des types, qui sont paramétrés dans la tables principale, et sont des noms de colonnes dans la tables 2? Tu ne peux pas en SQL et dans un select spécifier de noms de colonnes dynamique, c’est forcément des id.
edit: je me doute que tu as des contraintes, mais tu ne pourrait pas revoir le modèle de données ?
Edité le 07/09/2007 à 12:08
SN > Le problème c’est que le nom de ces colonnes n’est pas connu à l’avance, donc impossible de tout sélectionner et ensuite prendre la colonne non-nulle.
deltree > Tu a bien compris, les données contenues dans la table 1 représentent le nom d’une colonne dans la table 2 (ou dans la table 3, 4,…).
Au début j’étais parti sur une requete MySQL car le script devait etre en bash.
Il s’avère maintenant que je dois faire le truc en PHP, pour qu’il y ait un accès web. (je vous passe les détails)
Du coup je vais faire une requête pour connaître le nom des colonnes, et utiliser le résultat pour construire une deuxième requête qui ira chercher les données.
Si ça interesse quelqu’un, il existe un début de réponse sur developpez.com : www.developpez.net…
Du PL SQL apparemment ;):
j’avais travaillé sur une table zarbi de type “serial_number, nom_champ, valeur”: en mulitpliant donc le nb de ligne par le nombre de colonnes, et avec nom_champ qui remplit l’équivalent du nom de ta colonne. (et la clef serialnumber+nom_champ)
ça remplissait à peut près ton besoin sans faire de bidouille de requêtes, si tu peux modifier la structure de ta table