Rechercher : dans
Par :

{MySQL} Fusionner deux lignes

Dernière réponse le 24 jun 2009 à 09:43:48 LeGhe, le 23 jun 2009 à 09:22:58 
 Signaler ce message aux modérateurs

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

Meilleures réponses pour « {MySQL} Fusionner deux lignes » dans :
Fusionner deux partitions VoirFusionner deux partitions (en anglais partition merge) n'est possible que si l'une d'entre-elle est vide, car il peut exister deux fichiers différents portant le même nom et le même chemin sur deux différentes partitions. Ainsi, pour y arriver, il...
Sed - Numérotation de lignes VoirNumérotation * Numéroter les lignes (équivalent à "cat -n fichier.txt") sed = fichier.txt L'inconvénient c'est que l'affichage se fait sur 2 lignes. Donc pour palier à ce petit "défaut" sed = fichier.txt | sed 'N;s/\n/\t/' Numéroter les...

1

LeGhe, le 23 jun 2009 à 10:55:25

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 !

Répondre à LeGhe

2

Darkito, le 23 jun 2009 à 11:22:48

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

Tøƒ

Répondre à Darkito

3

LeGhe, le 23 jun 2009 à 11:31:07

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...

Répondre à LeGhe

4

LeGhe, le 23 jun 2009 à 11:42:39

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...

Répondre à LeGhe

5

Darkito, le 23 jun 2009 à 11:44:43

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) Tøƒ

Répondre à Darkito

6

LeGhe, le 23 jun 2009 à 11:52:44

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

Répondre à LeGhe

7

Dr Zoidberg, le 23 jun 2009 à 11:58:29
  • +1

Salut,
Je ferais plus quelque chose comme

SELECT BookID,group_concat(SubjectID) as SubjectID FROM table GROUP BY BookID

Répondre à Dr Zoidberg

8

LeGhe, le 23 jun 2009 à 12:02:33

Tableau BLOB bizarre créé:
BookID SubjectID
157 [BLOB - 3o]
172 [BLOB - 7o]

Répondre à LeGhe

9

LeGhe, le 23 jun 2009 à 13:53:39

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

Répondre à LeGhe

10

LeGhe, le 23 jun 2009 à 16:08:42

Un p'tit up ?

Répondre à LeGhe

11

Darkito, le 23 jun 2009 à 16:49:36
  • +2

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 Tøƒ

Répondre à Darkito

12

LeGhe, le 23 jun 2009 à 17:08:45

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

Répondre à LeGhe

13

Dr Zoidberg, le 23 jun 2009 à 17:29:02
  • +2

Il manque le 'FROM Book' avant le 'left outer'

Répondre à Dr Zoidberg

14

 Darkito, le 24 jun 2009 à 09:43:48

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.
Tøƒ

Répondre à Darkito