Problème de requête mySQL Afficher plusieurs info d'un même champs sur une seule

snif84 Messages postés 2 Date d'inscription mardi 6 mars 2007 Statut Membre Dernière intervention 14 décembre 2010 - 10 déc. 2010 à 15:24
aieeeuuuuu Messages postés 698 Date d'inscription jeudi 16 janvier 2003 Statut Membre Dernière intervention 20 mai 2011 - 14 déc. 2010 à 17:11
Bonjour à tous,

J'ai un problème de requête sur une seul table.

user_id field_id textarea
9532 16 Torres
9532 18 Samanta
9533 18 Audrey
9533 16 WARINA
9533 21 1 allée des prunes
9533 22
9534 18 Tatiana
9534 16 CHACHKINE


Donc voici ma table, je souhaiterai afficher sur une seule ligne tous les infos du champs textarea.
ex:"Audrey WARINA 1 allée des prunes",
grâce aux champs user_id et field_id.

Voili, je galère bien. Merci

5 réponses

aieeeuuuuu Messages postés 698 Date d'inscription jeudi 16 janvier 2003 Statut Membre Dernière intervention 20 mai 2011 3
10 déc. 2010 à 17:53
Bonjour

Il s'agit la de "cosmetique" et un SGBDR n'est pas fait pour ca

La meilleure solution serait de traiter vos resultats dans votre programme, avant l'affichage

il y a cependant des solution pour ca faire en SQL, mais si elles ne sont pas très jolies

avez-vous un nombre fini de "field_id" ?

Donnez un peu plus de precisions (field_id se rapport-t-il a une autre table ?)
et expliquez pourquoi vous voulez faire ca, afin qu'on trouve la meilleurs solution
0
Malamute7 Messages postés 25 Date d'inscription mercredi 25 juin 2008 Statut Membre Dernière intervention 25 décembre 2010
11 déc. 2010 à 02:50
Bonsoir,

comme le dit aieeeuuuuu
la structure de votre table devrais plutôt être celle ci

CREATE TABLE Information
(id_information integer PRIMARY KEY, il s'agit de la clef primaire
nom char(25),
prenom char(50),
adresse char(25));

SELECT * on recupere tous les champs de la table informations
FROM Information

et tu auras tes resultats sous cette forme,

1 Torres Samanta
2 Audrey WARINA 1 allée des prunes
3 Tatiana CHACHKINE

Cordialement
0
cs_Robert33 Messages postés 834 Date d'inscription samedi 15 novembre 2008 Statut Membre Dernière intervention 14 janvier 2017 33
11 déc. 2010 à 17:30
Bonjour

Je ne connais pas MySql, mais en MsSql on peut utiliser un "Cursor" et je pense que c'est du standard.

ex:

DECLARE @user int , @field int , @text varchar(50)
DECLARE @currentuser int
DECLARE @currentdata varchar(255)
DECLARE UserCursor CURSOR FOR 
    SELECT user_id, field_id, textarea FROM UserInfo ORDER BY user_id, field_id

OPEN UserCursor

FETCH NEXT FROM UserCursor INTO @user, @field, @text
set @currentuser=@user
set  @currentdata = @text

WHILE (@@FETCH_STATUS = 0)
begin
   FETCH NEXT FROM UserCursor INTO @user, @field, @text
   if @currentuser=@user 
     set @currentdata = @currentdata +' '+  @text 
   else
     begin
       print @currentdata
       set  @currentdata = @text
       set @currentuser = @user
     end
END
print @currentdata

CLOSE UserCursor
DEALLOCATE UserCursor



Bob.
C# is amazing, enjoy it!
0
snif84 Messages postés 2 Date d'inscription mardi 6 mars 2007 Statut Membre Dernière intervention 14 décembre 2010
14 déc. 2010 à 16:43
Bonjour à tous,

Merci pour vos réponses,

@aieeeuuuuu: field se rapporte à d'autre table mais rien d'important, c'est une table qui dit que le noms = à l'id 18 par exemple; le 21 à l'adresse etc...
Je veux simplement afficher sur une même ligne ex:"Audrey WARINA 1 allée des prunes".
pour mettre à jour cette table :
transaction_id|sale_id|date_achat|type_reglement|description_produit|prix|email|prenom|nom|adresse1|adresse2|zip|ville|pays

Tous mes champs sont déjà renseignés sauf prenom, nom, adresse1, adresse2 qui correspond au field_id 18, 16, 21, 22. Et les données sur textarea.


@Malamute7: Je sais que la structure de la table est pourri, mais je ne l'ai pas choisi, c'est une table généré par phpfox.


@Robert33: Ta réponse correspond à mon besoin avec le coup du curseur, mais bon je suis un débutant et je suis pas arrivé à l'adapter. Je ne comprends pas si j'imbrique plusieurs requête du type :
SELECT textarea FROM phpfox_custom_field2text WHERE custom_field_id = 16
Il n'y a pas moyen de les afficher cote à cote.

En tout cas merci pour votre aide
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
aieeeuuuuu Messages postés 698 Date d'inscription jeudi 16 janvier 2003 Statut Membre Dernière intervention 20 mai 2011 3
14 déc. 2010 à 17:11
Bonjour

Si vous ne pouvez pas modifier la structure de la base, alors vous pouvez faire comme ceci, c'est pas très joli et fastidieux a mettre en place, mais je pense que vous n'aurez pas trop le choix que de passer par une requete "lourde" a ecrire :

joindre la table sur elle meme autant de fois que vous avez de colonne a concatener, du style

SELECT COALESCE(T_Nom.textArea, 'N/A') + ' ' 
    + COALESCE(T_prenom.textArea, 'N/A') + ' '
    + COALESCE(T_adresse.textArea, 'N/A')
FROM
    MaTable AS T_Nom
LEFT OUTER JOIN MaTable AS T_Prenom 
    ON T_Nom.user_id = T_Prenom.user_id 
    AND T_Prenom.field_id = 18
LEFT OUTER JOIN MaTable AS T_Adresse
    ON T_Nom.user_id = T_Adresse.user_id 
    AND T_Adresse.field_id = 21
WHERE T_Nom.field_ID = 16
0
Rejoignez-nous