{MySQL} Fusionner deux lignes

LeGhe -  
Darkito Messages postés 1191 Date d'inscription   Statut Membre Dernière intervention   -
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 !
Configuration: Windows Vista
Firefox 3.0.11

12 réponses

Darkito Messages postés 1191 Date d'inscription   Statut Membre Dernière intervention   545
 
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
Dr Zoidberg Messages postés 547 Statut Membre 100
 
Il manque le 'FROM Book' avant le 'left outer'
3
Darkito Messages postés 1191 Date d'inscription   Statut Membre Dernière intervention   545
 
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.
0
Dr Zoidberg Messages postés 547 Statut Membre 100
 
Salut,
Je ferais plus quelque chose comme
SELECT BookID,group_concat(SubjectID) as SubjectID FROM table GROUP BY BookID
1
LeGhe
 
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 !
0

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

Posez votre question
Darkito Messages postés 1191 Date d'inscription   Statut Membre Dernière intervention   545
 
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

0
LeGhe
 
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...
0
LeGhe
 
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...
0
Darkito Messages postés 1191 Date d'inscription   Statut Membre Dernière intervention   545
 
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)
0
LeGhe
 
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
0
LeGhe
 
Tableau BLOB bizarre créé:
BookID SubjectID
157 [BLOB - 3o]
172 [BLOB - 7o]
0
LeGhe
 
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
0
LeGhe
 
un p'tit up ?
0
LeGhe
 
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
0