[MySQL] Befehle verknüpfen

WorldRacer

Erfahrenes Mitglied
Hallo zusammen,

habe ein kleines PHP-Skript für die Ersetzung eines Begriffes in Tabellen, die mit pn_ Beginnen geschrieben. Wollte nun fragen, ob es funktioniert, dieses Skript in einen MySQL-Befehl umzusetzen.

Wäre dann so:

Gib Tabellen aus, die mit "pn_" Beginnen -> Für jede dieser Tabelle, gib die Felder aus, die vom Typ "text" oder "varchar" sind -> In jeder dieser Felder ersetze den Begriff.

PHP-Skript dazu:
PHP:
<?php
	
	$sql = "SHOW TABLES";
	$tables = mysql_query($sql);
	
	while($table = mysql_fetch_row($tables)){
		if(substr($table[0], 0, 3) == "pn_"){ 
			$sql = "DESCRIBE " . $table[0];
			$fields = mysql_query($sql);
			while($field = mysql_fetch_row($fields){
				if(strpos(strtolower($field[1]), "varchar") !== FALSE || strpos(strtolower($field[1]), "text") !== FALSE){
					$sql = "UPDATE " . $table[0] . " SET " . $field[0] . " = REPLACE(" . $field[0] . ", 'Liste1', 'Liste2');";
					mysql_query($sql);
				}
			}
		}	
	}
?>
 
Code:
SELECT 
	TABLE_NAME,
    COLUMN_NAME 
FROM 
	INFORMATION_SCHEMA.COLUMNS 
WHERE 
	TABLE_SCHEMA = "[myDbSchemaName]"
	AND DATA_TYPE IN ("text", "varchar")
	AND TABLE_NAME LIKE "pn_%"

noch [myDbSchemaName] ersetzen und schon hast du alle Tabellen mit den Feldern text oder varchar
 
@XChris: Sry, aber ich brauche keinen Affen, der mir meine Fragen wiederholt -.-

@yaslaq: Ok, danke dafür. Wie bekomm ich nun jedes dieser ermittelten Felder den Text ersetzt?
 
PHP:
$sql = 
	"SELECT 
		TABLE_NAME,
		COLUMN_NAME,
		CONACT('UPDATE ', TABLE_NAME, ' SET ', COLUMN_NAME, '=REPLACE(', COLUMN_NAME, ', \'Liste1\', \'Liste2\')') AS UPDATE_SQL 
	FROM 
		INFORMATION_SCHEMA.COLUMNS 
	WHERE 
		TABLE_SCHEMA = '[myDbSchemaName]'
		AND DATA_TYPE IN ('text', 'varchar')
		AND TABLE_NAME LIKE 'pn_%'";
$tables = mysql_query($sql);

$result = mysql_query($sql);
while ($row = mysql_fetch_object($result)) {
	mysql_query($row->UPDATE_SQL);
}
Vorsicht, nicht getestet...
 
In MySQL kannst du meines Wissens nach keine SQLs ausführen bei denen die Tabelle Variabel ist.
Oracle-DB hat den Vorteil, dass es PL/SQL beinhaltet, eine DB-Eigene Programmiersprache mit der man genau solches machen kann.

PHP ist darum sehr wohl umgänglich - nimm irgend eine Sprache.
 
Danke für die Erklärung. Aufgrund der jahrelangen Benutzung eines CMS bin ich auf MySQL angewiesen, und nehme daher auch lieber PHP.
 
Zurück