MySQL Befehl über 'X' Tabellen
MySQL Befehl über 'X' Tabellen
Hallo,
ich habe eine Datenbank mit mehren tausend Tabellen, jede zehnte davon heißt (Präfix)_config.
Ich möchte in allen gleichzeitig eine Spalte bearbeiten - geht das überhaupt direkt auf der DB? Oder nur über php oder cgi?
Beispiel:
UPDATE *_config SET config_value = '<img src="impressum.jpg">' WHERE CONVERT( *_config.config_name USING utf8 ) = 'site_desc' LIMIT 1 ;
(mit den Wildcards geht´s halt nicht........)
Danke!
kird1
ich habe eine Datenbank mit mehren tausend Tabellen, jede zehnte davon heißt (Präfix)_config.
Ich möchte in allen gleichzeitig eine Spalte bearbeiten - geht das überhaupt direkt auf der DB? Oder nur über php oder cgi?
Beispiel:
UPDATE *_config SET config_value = '<img src="impressum.jpg">' WHERE CONVERT( *_config.config_name USING utf8 ) = 'site_desc' LIMIT 1 ;
(mit den Wildcards geht´s halt nicht........)
Danke!
kird1
- StarWolf3000
- Mitglied
- Beiträge: 1019
- Registriert: 25.07.2005 10:20
- Wohnort: Stolpen
- Kontaktdaten:
MySQL kennt noch eine andere Art von Wildcard, den %-Operator, der anstelle des *-Operators benutzt werden sollte, da * nicht immer oder gar nicht funktioniert.
Code: Alles auswählen
UPDATE %_config SET config_value = '<img src="impressum.jpg">' WHERE CONVERT( %_config.config_name USING utf8 ) = 'site_desc' LIMIT 1 ;
MOD-Einbauhilfe und Installationen über ICQ, TeamSpeak 2/3 und TeamViewer. Support nur im Forum, eingeschränkt per TeamViewer, aber nicht mehr per PN! • KB:knigge
- StarWolf3000
- Mitglied
- Beiträge: 1019
- Registriert: 25.07.2005 10:20
- Wohnort: Stolpen
- Kontaktdaten:
Dann ist es nicht möglich, Wildcards werden anscheinend nicht in der Tabellen-Auswahl berücksichtigt bzw. erzeugen sogar einen Fehler. Da bleibt nur noch, jede Tabelle einzeln aufzuführen und dann bei jeder über eine Referenzvariable tX.config_name bzw. tX.config_value darauf zuzugreifen.
MOD-Einbauhilfe und Installationen über ICQ, TeamSpeak 2/3 und TeamViewer. Support nur im Forum, eingeschränkt per TeamViewer, aber nicht mehr per PN! • KB:knigge
Hallo!
Gemäß Dokumentation ist es aber zumindest möglich, alle Tabellen mit einem Befehl zu ändern ("UPDATE table1, table2, table3, ... SET ..."). Zwar müssen sie trotzdem einzeln aufgeführt werden, aber man muss nicht mehrere tausend Abfragen durchführen.
Gemäß Dokumentation ist es aber zumindest möglich, alle Tabellen mit einem Befehl zu ändern ("UPDATE table1, table2, table3, ... SET ..."). Zwar müssen sie trotzdem einzeln aufgeführt werden, aber man muss nicht mehrere tausend Abfragen durchführen.
Aber wieso liest Du nicht sämtliche Namen der Tabellen *config aus, schreibst das in ein Array und mit diesem Array baust Du eine SQL Query, die die Daten in den Tabellen (diesmal mit explizitem Namen) ändert.
Tip:
Tip:
Code: Alles auswählen
SHOW TABLES LIKE '%config';
Gruss, Miriam.
Ich schmeiß' alles hin und...
... lasse es liegen
Ich schmeiß' alles hin und...
... lasse es liegen
- gn#36
- Ehrenadmin
- Beiträge: 9313
- Registriert: 01.10.2006 16:20
- Wohnort: Ganz in der Nähe...
- Kontaktdaten:
Es ist auch möglich aus einer Datenbank die existierenden Tabellen auszulesen:
Ich nutze das z.B. so (Auszug):
Das Updated mir dann immer gleich alle 3 Tabellen special_stats_offense, special_stats_defense, special_stats_pitching auf einmal. Ist natürlich in dem Fall auch einfacher machbar, ich hatte das aber ursprünglich für 10 Tabellen gleichzeitig geschrieben da war das schon sinnvoll. Lässt sich natürlich noch optimieren.
Code: Alles auswählen
$sql = "SHOW TABLES";
$tables = $db->sql($sql);
$i = 0;
while($table = $db->result($tables,$i))
{
$i++;
//in $table steht jetzt ein Tabellenname aus deiner Tabelle, den kannst du dann beliebig z.B. per preg_match abgleichen
}
Code: Alles auswählen
$tabellen_muster = 'special_stats';
$exclude = array();
$query_muster = array();
$query_muster[] = "UPDATE {TABELLEN_NAME} SET special_id = 3 WHERE special_stats_name = 'dm07'";
$sql = "SHOW TABLES";
$tables = $db->sql($sql);
$i = 0;
while($table = $db->result($tables,$i))
{
$i++;
//$table = $table[0];
if(strpos($table, $tabellen_muster) !== FALSE && !in_array($table,$exclude))
{
foreach($query_muster as $query_id => $query)
{
$query = str_replace('{TABELLEN_NAME}',$table,$query);
$db->sql($query) or message_add(ERROR,'Fehler beim Ausführen des Queries ID '. $query_id . ' Tabelle '.$table,'Fehler',__LINE__,__FILE__,$query);
}
}
}
Begegnungen mit dem Chaos sind fast unvermeidlich, Aber nicht katastrophal, solange man den Durchblick behält.
Übertreiben sollte man's im Forum aber nicht mit dem Chaos, denn da sollen ja andere durchblicken und nicht nur man selbst.
Übertreiben sollte man's im Forum aber nicht mit dem Chaos, denn da sollen ja andere durchblicken und nicht nur man selbst.
Dann mach doch gleich
Dann bist Du (fast) alle Sorgen los (zumindest was den Tabellennamen betrifft.)
Code: Alles auswählen
SHOW TABLES LIKE 'special_stats_%';
Gruss, Miriam.
Ich schmeiß' alles hin und...
... lasse es liegen
Ich schmeiß' alles hin und...
... lasse es liegen
- gn#36
- Ehrenadmin
- Beiträge: 9313
- Registriert: 01.10.2006 16:20
- Wohnort: Ganz in der Nähe...
- Kontaktdaten:
Da haben wir mal wieder fast gleichzeitig gepostet...
Nein macht bei mir keinen Sinn da das Skript (das hier nur in Auszügen steht) bei mir gleich einiges an unterschiedlichen Tabellen updaten soll. Ich habe da noch eine ca. zwei Bildschirmseiten lange Liste an SQL Befehlen zwischen die ich nicht für soo wichtig hielt sie hier zu posten
Da sind dann auch noch andere Tabellen bei als 'special_stats_%'. Trotzdem danke 
Nein macht bei mir keinen Sinn da das Skript (das hier nur in Auszügen steht) bei mir gleich einiges an unterschiedlichen Tabellen updaten soll. Ich habe da noch eine ca. zwei Bildschirmseiten lange Liste an SQL Befehlen zwischen die ich nicht für soo wichtig hielt sie hier zu posten


Begegnungen mit dem Chaos sind fast unvermeidlich, Aber nicht katastrophal, solange man den Durchblick behält.
Übertreiben sollte man's im Forum aber nicht mit dem Chaos, denn da sollen ja andere durchblicken und nicht nur man selbst.
Übertreiben sollte man's im Forum aber nicht mit dem Chaos, denn da sollen ja andere durchblicken und nicht nur man selbst.