我有一个名为'products'的动态表,其中包含多种语言。 表格列如下所示:
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_'开头的所有列,还是我必须列出所有列?
根据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));
答案 0 :(得分:5)
您需要明确设置每一列。 SQL不支持列名称的通配符(*
的{{1}}除外):
SELECT *
您的数据结构表明您确实需要update products
set store_de = 1,
store_en = 1,
store_fr = 1,
store_es = 1,
. . .
where product_id = ?;
表。每个语言(?)和每个产品都有一行。它至少有三列:
ProductStores
ProductId
Language
然后你会做:
Value
答案 1 :(得分:3)
你不能这样做from matplotlib import pyplot as plt
import numpy as np
dat = np.array(range(9)).reshape(3,3)
plt.matshow(dat)
plt.show()
- 它是表中不存在的列,因为它写在你的错误中。
您应该获得名称为store_%
(regexp)的所有列。然后更新列出它们的所有字段。
/^store_/
收集来自'字段' ...您可以阅读更多如何获取所有列here的所有字段。