J'ai une table dynamique nommée 'produits' avec plusieurs langues. Les colonnes de la table ressemble à ceci:Mysql mettre à jour toutes les colonnes commençant par le même nom
id, product_id, store_de, store_en, store_fr, store_es... etc
Les langues peuvent être plus ou moins.
Maintenant, je veux mettre à jour ce tableau et définir toutes les colonnes commençant par "store_" à la valeur 1.
J'ai essayé les éléments suivants:
$stmt = $dbh->prepare("UPDATE products SET `store_%` = ? WHERE product_id = ?");
$stmt->execute(array(1, $lastID));
Je reçois le message suivant d'erreur:
SQLSTATE [42S22]: Colonne non trouvée: 1054 Colonne inconnue 'store%' dans 'Liste des champs'
Existe-t-il un moyen de mettre à jour toutes les colonnes commençant par 'store_' ou dois-je énumérer toutes les colonnes?
Sur la base de la réponse de jekaby est ici la solution complète qui a fonctionné pour moi:
$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));
Vous pouvez entrer dans INFORMATION_SCHEMA, obtenir tous les noms de colonnes désirés à partir de là et construire les requêtes avec cette information. Mais c'est encore plus compliqué que de le faire manuellement. – Mihai
Le problème est, que les langues sont générées par l'utilisateur. Donc, si l'utilisateur ajoute une langue, la requête doit changer automatiquement lorsque la table change. – Jaycaponex