Forum Clubic

Comment fusionner des champs en PHP/MySQL ?

Bonjour,

Je rencontre actuellement un problème que je n’arrive pas à résoudre.

J’ai un site internet en PHP qui fait appel à une base MySQL.

Voici le résultat de ma requête SQL que j’obtiens:

J’ai 3 colonnes de résultat:

leNom montant global montant total
utilisateur1 1200 NULL
utilisateur2 340 NULL
utilisateur1 NULL 2300
utilisateur3 NULL 23

Or, je souhaiterai que mysql me fusionne les champs possibles ainsi:
utilisateur1 | 1200 | 2300
utilisateur2 | 340 | NULL
utilisateur3 | NULL | 23

J’ai essayé un SELECT
… FROM
GROUP BY leNom UNION SELECT
FROM
GROUP BY leNom
Mais il ne me fait pas la bonne fusion.

Savez-vous pourquoi je n’obtiens pas le résultat souhaité ? Si oui, savez-vous comment l’obtenir ?

Par avance, merci de votre aide.

Julien

Donne nous plutôt la requête SQL complète, qu’on voit ce qu’on peut faire.

Là, on ne peut rien faire sans la réécrire, et ça ne correspondra pas à tes besoins/attentes

Ce que tu veux c est cela:
SELECT leNOM+[montant global]+[montant total]
FROM …

A cela il va falloir que tu rajoutes un test IF / THEN / ELSE pour savoir si un champ est null ou pas. car si tu concatenes un champ null a une string tu obtiens null.

Tu peux aussi essayer de regarder la methode Concat() et la methode Convert()

J ai pas d editeur mySQL sous la main donc je peux pas te fournir la syntax exact

Cdlt,

Bonjour et merci pour vos réponses.

En fait, voilà grosso-modo la requête que j’utilise (je l’ai “simplifiée” pour ne garder que l’essentiel):

SELECT leNom, SUM(qteGlobal) AS montantGlobal, NULL AS montantTotal
FROM table1 WHERE monTest=‘2008’
GROUP BY leNom
UNION
SELECT leNom, NULL AS montantGlobal, SUM(qteTotaux) AS montantTotal
FROM table2
WHERE monTest=‘2008’
GROUP BY leNom

Les tables sont ainsi:

Table1:

leNom montantGlobal
utilisateur1 1200
utilisateur2 340

et ma
table 2:

leNom montantTotal
utilisateur1 2300
utilisateur3 23

ps: je précise que j’ai simplifié la table pour la mettre dans le forum mais qu’en réalité, malgré l’aspect “simple” de mon exemple, les table1 et table2 ne peuvent pas être une seule et même table avec pour champs: leNom;montantGlobal;montantTotal.

Par avance, merci de votre aide.

Julien.


chryso, merci de ta réponse, mais en fait, je pense que MySQL doit arriver à gérer cela.... mais je n'arrive pas à voir comment !! ;-)

En tous les cas, merci pour ta réponse.

Julien.

Le souci c’est que tu utilises deux tables distinctes. Donc de ce côté, tu n’as guère de choix.

Eventuellement, tu peux faire un INNER JOIN, mais c’est supposé que tu ai une relation entre les deux tables

Est ce que ceci ne fonctionne pas ?

SELECT t1.leNom, t1.montantGlobal, t2.montantTotal FROM table1 AS t1, table2 AS t2 WHERE t1.leNom = t2.leNom;

Remarque : ceci devrait uniquement fonctionner si l’utilisateur est présent dans les deux tables.

Bonjour et merci à vous tous pour vos réponses.

En fait, j’ai pu “résoudre” mon problème en utilisant une table temporaire, me permettant ainsi de décortiquer mon problème en plusieurs étapes plutôt que de vouloir résoudre tout d’un seul coup, avec une seule requête.

Si cela peut aider certains, ça fonctionne ainsi:
CREATE TEMPORARY TABLE temp SELECT * FROM donnees WHERE…

Ainsi, j’ai “dissocié” mon problème en 5 requêtes qui, au final fusionnent dans ma table temporaire qui me permet ainsi d’obtenir, au final, mon résultat.

En tous les cas, merci à vous tous pour vos réponse.:slight_smile:

Julien.