Du bist nicht angemeldet. Der Zugriff auf einige Boards wurde daher deaktiviert.
Seiten: 1
#1 09. September 2011 21:39
- nhaack
- Server-Pate
- Ort: Bonn
- Registriert: 12. Dezember 2010
- Beiträge: 171
- Webseite
MySQL -> Tabelle auf verschiedene Tabellen aufteilen
Hallo zusammen,
Ich habe einen sehr großen Table table_name. Diese würde ich gerne nach dem Wert in einer bestimmten Spalte table_name.column_x (Typ Varchar Länge 3) aufteilen und dabei die entsprechenden Tables auch erstellen, mit dem Wert als Postfix. Also z.B. table_name_abc.
Ich würde das in etwa wie folgt machen
CREATE TABLE table_name_abc
AS SELECT * FROM table_name
WHERE table_name.column_x = 'abc'
Ich kann natürlich vorab über PHP eine Abfrage auf die verschiedene Werte fahren und dann jeweils das create table as select ausführen (mit jeweiligem Wert als Ersatz für abc), frage mich jedoch, wie ich das vielleicht in einem Move direkt in mysql hinbekomme.
Ich bin ja was mysql angeht noch ziemlich am Anfang und stehe gerade etwas auf dem Schlauch. Geht das überhaupt? Was wäre ein Stichwort in die richtige Richtung?
Danke & Grüße
Nils
Offline
#2 10. September 2011 11:31
- piratos
- arbeitet mit CMS/ms
- Registriert: 12. August 2011
- Beiträge: 545
Re: MySQL -> Tabelle auf verschiedene Tabellen aufteilen
Also nachdem ich deine Frage im ersten Anlauf falsch verstanden habe.
Man kann diverse SQL Abfragen in einem Rutsch abfeuern, in dem man am Ende der Sql den Trenner ; anhängt.
Offline
#3 11. September 2011 13:03
- nhaack
- Server-Pate
- Ort: Bonn
- Registriert: 12. Dezember 2010
- Beiträge: 171
- Webseite
Re: MySQL -> Tabelle auf verschiedene Tabellen aufteilen
Das mit dem Trenner kannte ich noch nicht. Cooler Tipp. Danke.
Was ich allerdings erreichen wollte ist quasi ein erstes Select mit dem ich alle unterschiedlichen Werte aus table_name.column_x ermittel (z.B. "abc", "def" und "geh") und dann Quasi in einer foreach-Schleife die einzelnen Tables (table_name_abc, table_name_def ... ) erstelle.
Ich hab mich dann gefragt, ob das nicht komplett in mysql direkt geht und sich das nicht ggf. in einer Abfrage realisieren lässt.
Also irgendwie so:
SELECT column_x
FROM table_name
GROUP BY column_x
foreach result
CREATE TABLE table_name_<value> ...
AS SELECT * FROM table_name
WHERE table_name.column_x = '<value>'
Offline
#4 11. September 2011 13:29
- piratos
- arbeitet mit CMS/ms
- Registriert: 12. August 2011
- Beiträge: 545
Re: MySQL -> Tabelle auf verschiedene Tabellen aufteilen
Das geht, aber nicht mit einfachen Mitteln.
Dazu müsstes du eine Mysql stored function entwickeln, das aber ist nicht so ganz ohne und für einen Anfänger ziemlich schwere Kost.
Darüber hinaus muss man auch wissen, das bei der einfachen Form create ... as select Keys verschwinden, und Character set wie auch default charset auf Mysql Default - Werte fallen, wenn man sie nicht angibt, auch das muss man korrigieren bzw. in der SQL angeben.
Offline
#5 11. September 2011 13:49
- nhaack
- Server-Pate
- Ort: Bonn
- Registriert: 12. Dezember 2010
- Beiträge: 171
- Webseite
Re: MySQL -> Tabelle auf verschiedene Tabellen aufteilen
Verstehe. Da das nur für gelegentliche Wartungsarbeiten gedacht ist, mache ich dann doch lieber den Umweg über PHP
Kurze Frage noch zum Encoding: wenn die Defaults der Installation zum Table passen, dann dürfte das doch kein Problem sein. Oder sollte man das Encoding immer Angeben (Best-Practise oder so).
Danke & Grüße
Offline
#6 11. September 2011 13:56
- piratos
- arbeitet mit CMS/ms
- Registriert: 12. August 2011
- Beiträge: 545
Re: MySQL -> Tabelle auf verschiedene Tabellen aufteilen
Wenn die Mysql so eingestellt ist das die Tabellen dann die gleichen Einstellungen übernehmen muss man nichts machen.
Da kann man aber absolut nicht sicher sein.
Ein Beispiel wie man so etwas machen kann:
create table mynewtable ENGINE=INNODB CHARACTER SET utf8 COLLATE utf8_general_ci (select * from cms_geo_plz)
Die Engine muss nur angegeben werden, wenn man die für seinen Zweck ändern will, aber Vorsicht, bei hoch aktuellen Mysql Versionen ist INNODB Standard und nicht MYISAM, also am besten auch das angeben.
Offline
Seiten: 1