{MySQL} Fusionner deux lignes [Fermé]

Signaler
-
Darkito
Messages postés
1193
Date d'inscription
vendredi 7 décembre 2007
Statut
Membre
Dernière intervention
26 mai 2010
-
Bonjour,

BookID SubjectID
172 674
172 656
175 612
180 34766
180 616

Comment obtenir :

BookIDSubjectID
172 674,656
175 612
180 34766,616

?

Merci de votre aide !

12 réponses

Messages postés
1193
Date d'inscription
vendredi 7 décembre 2007
Statut
Membre
Dernière intervention
26 mai 2010
494
Dans ce cas la, une petite jointure suffit (on va me prendre pour un maniaque de la jointure :p)

SELECT 
   Book.ID,
   Book.title,
   group_concat(bookxsubject.SubjectID)
LEFT OUTER JOIN bookxsubject ON bookxsubject.BookID=Book.ID 
GROUP BY Book.ID, Book.title


A peaufiner avec l'histoire des blob / text
5
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 87181 internautes nous ont dit merci ce mois-ci

Messages postés
533
Date d'inscription
jeudi 28 juin 2007
Statut
Membre
Dernière intervention
12 juin 2015
98
Il manque le 'FROM Book' avant le 'left outer'
Darkito
Messages postés
1193
Date d'inscription
vendredi 7 décembre 2007
Statut
Membre
Dernière intervention
26 mai 2010
494
Au temps pour moi, j'ai été un peu vite dans ma réponse.

@ LeGhe :
En même temps, c'est une erreur que tu aurais pu voir par toi même...
Rejette un œil sur les bases de la syntaxe SQL.
Ca t'aidera à comprendre le principe des jointures qui est appliqué ici.
Messages postés
533
Date d'inscription
jeudi 28 juin 2007
Statut
Membre
Dernière intervention
12 juin 2015
98
Salut,
Je ferais plus quelque chose comme
SELECT BookID,group_concat(SubjectID) as SubjectID FROM table GROUP BY BookID
Ca ne doit pas être bien compliqué, mais j'avoue qu'en tant que débutant, je m'arrache les cheveux depuis hier soir...

Merci à tou(te)s !
Messages postés
1193
Date d'inscription
vendredi 7 décembre 2007
Statut
Membre
Dernière intervention
26 mai 2010
494
Bonjour,

J'ai également rencontré ce problème et j'attendais de voir si quelqu'un avait la solution :p
Dans mon cas, le nombre de "sujet" possible pour un "livre" était un nombre fini.
Il y a alors moyen d'arriver au résultat que tu souhaite en faisant une jointure sur ta propre table.

Si tu n'as que 2 "sujet" possible, une solution est :
SELECT DISTINCT
B_1.BookID,
B_1.SubjectID || ', ' || B_2.SubjectID
FROM BOOK B_1 
LEFT OUTER JOIN BOOK B_2 ON B_2.BookID=B_1.BookID AND B_2.SubjectID<>B_1.SubjectID


J'ai appelé la table BOOK mais a toi de changer.
S'il y a plus que 2 sujets possibles, ca devient un peu plus compliqué pour éviter les doublons mais ca reste faisable

Merci de ta réponse.

A quoi correspondent les B_1 et B_2 ?
Quand je lance cette requête, "#1054 - Unknown column 'B_2.SubjectID' in 'field list'" apparaît, évidemment...
BookID B_1.SubjectID || ', ' || B_2.SubjectID
340 1
343 1
346 1

Je m'étais trompé dans la requête.
Cela, celle-ci ne met que la valeur "1" dans la nouvelle colonne...
Messages postés
1193
Date d'inscription
vendredi 7 décembre 2007
Statut
Membre
Dernière intervention
26 mai 2010
494
j'ai mis une syntaxe db2 , tu dois surement être en mySql, essaie avec

BookID B_1.SubjectID + ', ' + B_2.SubjectID

Voire plus "propre" :

CONCAT_WS(',',BookID B_1.SubjectID,B_2.SubjectID)
non...
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '.SubjectID + ',' + B_2.SubjectID FROM bookxsubject B_1 LEFT OUTER JOIN bookxsub' at line 3
Tableau BLOB bizarre créé:
BookID SubjectID
157 [BLOB - 3o]
172 [BLOB - 7o]
MERCI !!!!!
En changeant le type du champ SubjectID de blob a text, cela fonctionne nickel !!

Si je peux abuser, quelle requête lancer pour ajouter à ce champ SubjectID, toujours dans le même esprit (x,y,z,...) des champs d'une autre table ?

exemple :

TABLE Book
ID Title Country
157 livre1 600

TABLE bookxsubject
BookID SubjectID
157 599
157 656

Résultat recherché
TABLE bookfinal
ID Title Subjects
157 livre1 600,599,656
un p'tit up ?
Grand merci à toi pour ton temps...
Mais cela ne fonctionne pas :

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'LEFT OUTER JOIN bookxsubject ON (bookxsubject.BookID=book.ID) GROUP BY book.' at line 2