Mysql更新以相同名称开头的所有列

时间:2016-03-30 11:15:05

标签: php mysql sql-like

我有一个名为'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));

2 个答案:

答案 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的所有字段。