私は複数の言語で 'products'という名前の動的テーブルを持っています。 表の列は次のようになります。Mysqlは同じ名前で始まるすべての列を更新します
id, product_id, store_de, store_en, store_fr, store_es... etc
言語は、多かれ少なかれことができます。
今、私は次のことを試してみました。この表を更新したいと1
を評価するために、「STORE_」で始まるすべての列を設定します。
$stmt = $dbh->prepare("UPDATE products SET `store_%` = ? WHERE product_id = ?");
$stmt->execute(array(1, $lastID));
私はエラーメッセージを以下の取得:
SQLSTATE [42S22]:列が見つかりません:1054不明な列 'store%' in 'フィールドリスト'
'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