У меня есть динамическая таблица с именем «продукты» с несколькими языками. Столбцы таблицы выглядит следующим образом:Mysql обновить все столбцы, начинающиеся с того же имени
id, product_id, store_de, store_en, store_fr, store_es... etc
языки могут быть более или менее.
Теперь я хочу, чтобы обновить эту таблицу и установить все столбцы, начиная с «store_» дорожить 1.
Я попытался следующие:
$stmt = $dbh->prepare("UPDATE products SET `store_%` = ? WHERE product_id = ?");
$stmt->execute(array(1, $lastID));
Я получаю следующее сообщение об ошибке:
SQLSTATE [42S22]: Колонка не найдена: 1054 Неизвестный столбец 'store%' в 'список полей'
Есть ли способ обновить все столбцы, начинающиеся с «store_», или мне нужно перечислить все столбцы?
На основании ответа от jekaby здесь является полным решением, которое работает для меня:
$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));
Вы можете войти в INFORMATION_SCHEMA, получить оттуда все нужные имена столбцов и создать запросы с этой информацией. Но это еще сложнее, чем делать это вручную. – Mihai
Проблема в том, что языки создаются пользователем. Поэтому, если пользователь добавляет язык, запрос должен автоматически меняться при изменении таблицы. – Jaycaponex