Ich habe eine dynamische Tabelle namens "Produkte" mit mehreren Sprachen. Die Spalten der Tabelle sieht wie folgt aus:Mysql Update alle Spalten beginnend mit dem gleichen Name
id, product_id, store_de, store_en, store_fr, store_es... etc
Die Sprachen mehr oder weniger.
Jetzt möchte ich diese Tabelle aktualisieren und alle Spalten gesetzt mit „store_“ beginnen zu schätzen 1.
Ich habe versucht, die folgenden:
$stmt = $dbh->prepare("UPDATE products SET `store_%` = ? WHERE product_id = ?");
$stmt->execute(array(1, $lastID));
erhalte ich folgende Fehlermeldung:
SQLSTATE [42S22]: Spalte nicht gefunden: 1054 Unbekannte Spalte 'Speichern%' in 'Feldliste'
Gibt es eine Möglichkeit, alle Spalten zu aktualisieren, die mit 'store_' beginnen, oder muss ich alle Spalten auflisten?
Basierend auf der Antwort von jekaby hier ist die vollständige Lösung, die für mich gearbeitet:
$get_stores = $dbh->prepare("SHOW COLUMNS FROM products_active WHERE field REGEXP '^store'");
$get_stores->execute();
$stores = $get_stores->fetchAll();
$update_string = "";
$first_store = true;
foreach($stores as $store) {
if(!$first_store) {
$update_string .= ", ";
} else {
$first_store = false;
}
$update_string .= $store['Field']." = '".$status."'";
}
$update_activity = $dbh->prepare("UPDATE products_active SET $update_string WHERE product_id = ?");
$update_activity->execute(array($product_id));
Sie können in INFORMATION_SCHEMA gehen, alle gewünschten Spaltennamen von dort abrufen und die Abfragen mit diesen Informationen erstellen. Aber das ist noch komplizierter, als es manuell zu tun. – Mihai
Das Problem ist, dass die Sprachen vom Benutzer generiert werden. Wenn der Benutzer also eine Sprache hinzufügt, muss die Abfrage automatisch geändert werden, wenn sich die Tabelle ändert. – Jaycaponex