2016-11-15 1 views
1

Hallo Ich muss eine Denormalisierung auf einer MySQL-Tabelle mit sich wiederholenden Daten tun.Wie man eine Wiederholung mysql Daten denormalisieren?

Meine "Publikationen" Tabelle ist derzeit in diesem Format:

Publications Source Table 

| title     |  author 
-------------------------------------------- 
| my paper    |  michael 
| my paper    |  bill 
| my paper    |  jill 
| other paper    |  tom 
| other paper    |  amy 
| third paper    |  ben 
| third paper    |  sophie 

Ich brauche es in dieses Format zu ändern:

Publications Destination Table 

| title     | author | author2 | author 3 
|----------------------------------------------------------------- 
| my paper    | michael | bill  | jill 
| other paper    | tom  | amy  | 
| third paper    | ben  | sophie | 

Jetzt, nur für Ihre Information, die ich dies tun müssen, so Ich kann schließlich eine CSV-Datei erhalten, damit die Daten von einem alten System in ein neues System exportiert werden können, das eine CSV-Datei in diesem Format benötigt.

Auch gibt es viele andere Felder in der Tabelle und etwa 60.000 Zeilen in der Quellentabelle, aber nur etwa 15.000 eindeutige Titel. In der Quellentabelle gibt es eine Zeile pro Autor. Im Ziel wird Titel eine eindeutige Kennung sein. Ich brauche eine Zeile pro eindeutigen Titel der Publikation. Auch kann ich im voraus berechnen, welche Anzahl von Autoren in einer Publikation am meisten ist, wenn das Problem dadurch leichter wird.

Wie kann ich dies in MySQL tun? Danke

+2

Ihre Google-Suche Zeichenfolge ist mysql Pivot-Abfrage –

+1

Die erste Tabelle Design ist besser als die, die Sie erstellen möchten, aber immer noch Arbeit braucht. Ich möchte, dass die Veröffentlichungstabelle nur den Titel und andere Informationen enthält, für die eine Veröffentlichung nur einen Wert haben kann. Dann eine separate Tabelle für jede Information, für die eine Publikation mehrere Werte haben könnte. – CptMisery

+1

Bitte nicht, dass das Format, das ich versuche, ist einfach ein Format, für das jemand anderes bereits ein Importprogramm geschrieben hat. Die Daten werden in einem hoch normalisierten Unternehmensdatenbanksystem enden, ABER der Anbieter hat uns die Möglichkeit gegeben, Daten in dieses spezifische CSV-Format zu importieren. –

Antwort

2

Wenn Sie nicht wirklich wollen die Struktur der Tabelle ändern und stattdessen wollen einfach nur, um die Daten zu erhalten, so dass Sie sie in eine neue importieren System, könnten Sie die GROUP_CONCAT() Funktion in mySQL versuchen:

SELECT title, GROUP_CONCAT(author SEPARATOR "|") AS authors FROM publications GROUP BY title;

ich das Rohr als Trennzeichen verwendet haben, da es eine gute Chance, Ihre Titel Kommata enthalten. Wenn Sie möchten, dass dies als CSV-Datei endet, können Sie das Pipe-Zeichen suchen und ersetzen, um es zu dem zu machen, was es sein muss (z. B. ", ").

+0

Ich denke, das OP ist viel besser bedient von einer * Abfrage *, die die richtige Ausgabe produziert, als durch die Umstrukturierung der Tabelle, um die richtige Ausgabe zu produzieren. –

+0

Dies ist ein Schritt in die richtige Richtung Ich hätte noch die Header-Spalten "author1, author2 ... author13", und kombinieren, um Textdateien, aber das ist nicht schwierig. –

-1

Meine Empfehlung ist, dass Sie tatsächlich die Tabelle normalisieren, anstatt neue Spalten für ergänzende Autoren hinzuzufügen. So würde Ihre neue Tabellenstruktur wie folgt aussehen:

Publications Source Table 

| title_id   |  title 
-------------------------------------------- 
| 1    |  my paper 
| 2    |  other paper 
| 3    |  third paper 


| title_id  |  author 
-------------------------------------------- 
| 1    |  michael 
| 1    |  bill 
| 1    |  jill 
| 2    |  tom 
| 2    |  amy 
| 3    |  ben 
| 3    |  sophie 
+0

Warum sollten Sie das empfehlen, da ich die Daten in diesem Format brauche, damit sie von einem alten System in ein neues System exportiert werden können, das eine CSV-Datei in diesem Format benötigt. –

+2

Wenn dieses andere System "neu" ist, haben Sie eine Kontrolle darüber? Kannst du seine Anforderungen ändern? Oder für Veränderung eintreten? Was ich vorgeschlagen habe, entspricht eher der Standard-Datenbank-Design-Praxis. Mit Ihrem Entwurf wäre es viel schwieriger, Abfragen für die Tabellen im neuen System zu schreiben, wenn der CSV die neue Tabellenstruktur widerspiegelt. Und mein Design ist flexibler in Bezug auf die Anzahl der Autoren pro Titel. Ihr Design wird viele leere Autorenfelder erstellen, wenn ein Titel weniger als das Maximum hat, von dem ich annehme, dass es häufig ist. – mba12

+0

Das Hinzufügen neuer Ersatz-ID-Nummern hat * nichts * mit der Normalisierung zu tun. –

Verwandte Themen