Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Daten schnell zusammenfassen/gruppieren (https://www.delphipraxis.net/148525-daten-schnell-zusammenfassen-gruppieren.html)

luke2 3. Mär 2010 15:50

Datenbank: MySQL • Version: 5 • Zugriff über: Zeos

Daten schnell zusammenfassen/gruppieren
 
Hallo,

Angenommen ich habe eine Tabelle in der z.B. folgendes steht:
Name (TEXT, INDEX) - Nummer (INT)
Jan - 5
Alex - 6
Jan - 8
Karl - 7
Ali - 3
Jan - 1
Alex - 4

Diese Daten müssen nun in eine Tabelle transformiert werden, die später so aussieht.
Name (TEXT, UNIQUE) - Nummern (TEXT)
Jan - 5,8,1
Alex - 6,4
Karl - 7
Ali - 3

Die erste Tabelle enthält einen Index auf "Name" und die zweite einen Unique Index auf "Name".

Mit mehreren Inserts, Updates und der Funktion group_concat() habe ich das schon geschafft, aber es ist extrem langsam, da in der ersten Tabelle sehr viele Einträge stehen können.

Hat jemand eine Idee, wie man das ganze mit am besten einen einfachen und schnellen Insert/Update-Befehl machen kann?

omata 3. Mär 2010 16:45

Re: Daten schnell zusammenfassen/gruppieren
 
Ich hätte das jetzt so gemacht...
SQL-Code:
INSERT INTO tabelle2 (name, nummern)
SELECT name, GROUP_CONCAT(nummer, ',')
FROM tabelle1
GROUP BY name
Aber das war vermutlich genau dein schon versuchtes Vorgehen.

luke2 3. Mär 2010 16:53

Re: Daten schnell zusammenfassen/gruppieren
 
Vielen Dank omata, das funktioniert und ist sogar noch recht schnell, ich hatte das so ähnlich versucht, hatte aber wohl doch irgendwas falsch gemacht! :) :thumb:

luke2 7. Mär 2010 21:17

Re: Daten schnell zusammenfassen/gruppieren
 
Ich muss dieses Thema doch nochmal aktivieren.
Angenommen die 2. Tabelle enhält bereits alle Namen der 1. Tabelle, aber noch nicht alle Nummern.

Name (TEXT, UNIQUE) - Nummern (TEXT)
Jan - NULL
Alex - NULL
Karl - 5,4
Ali - NULL

(evtl. schon vorhandene Nummern sollen bestehen bleiben.)

Gibt es eine Möglichkeit mit einem Update-Befehl diese Tabelle genau so wie oben zu gruppieren?

omata 7. Mär 2010 21:50

Re: Daten schnell zusammenfassen/gruppieren
 
Vielleicht so...
SQL-Code:
UPDATE tabelle2 x
SET nummern = CONCAT(
                COALESCE(CONCAT(nummern, ','), ''),
                (SELECT GROUP_CONCAT(nummern)
                 FROM tabelle1
                 WHERE name = x.name)
              )

luke2 7. Mär 2010 22:14

Re: Daten schnell zusammenfassen/gruppieren
 
Funktioniert wieder perfekt, Vielen Dank nochmal. :thumb:

(War nur ein n zuviel bei dem 3. "nummern" :wink: )


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:36 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz