更新自定义列值 sql


Update a custom column value sql

当在拳击思维之外。我想出了以下解决方案:

$column = 'product';
$enum = '1';
$product_access = $dbh->prepare("UPDATE products_access SET {$column} = :enum WHERE products_access.id = :id");
$product_accessvar = trim($user['id']);
$product_access->bindParam(':id', $product_accessvar, PDO::PARAM_INT);
$product_access->bindParam(':enum', $enum, PDO::PARAM_INT);
//$product_access->bindParam(':product_enum', $enum);
//foreach($_POST["checkbox2"] as $loc_id) 
$product_access->execute();

感谢您的帮助,也许我可以帮助某人解决我的解决方案。它现在对我有用!


在我的问题下面

我有一个关于我的关注项目的问题。我构建了一个 sql 表,用户可以在其中添加具有枚举值的自定义列。但用户也可以更新此列的值。我无法设置任何列名称,因为它们都是由用户自定义的,因此没有列名称。

我的 SQL:

    tabel `products_access`
--
CREATE TABLE IF NOT EXISTS `products_access` (
  `id` int(30) NOT NULL,
  `user_id` int(30) NOT NULL,
  `product 2` enum('0','1') NOT NULL COMMENT 'Dit is een product beschrijving van product 2.dgfdg'
)

数组:

Array
(
    [id] => 17
    [name] => product 2
    [number] => 2002
    [description] => Dit is een product beschrijving van product 2.
    [mount] => 34
    [price] => 6778
    [deleted] => 0
    [user_id] => 17
    [product 2] => 1
)

脚本:

<label>
<input name="clickedproduct[]" type="checkbox" value="<?php echo $avlue['id']; ?>" <?php echo (($_SERVER['REQUEST_METHOD'] == 'POST') ? ((isset($_POST[$avlue['name']])) ? ' value="'.$avlue[$avlue['name']].'" checked' : ' value="'.$avlue[$avlue['name']].'"') : (($avlue[$avlue['name']] == '1') ? ' value="'.$avlue[$avlue['name']].'"checked' : ' value="'.$avlue[$avlue['name']].'"')); ?>>
<?php echo $avlue['name']; ?>
</label>  

PDO:

$product_access = $dbh->prepare('UPDATE products_access() VALUES(:id, :loc)');
$product_access->bindValue(':id', $id);
$product_access->bindParam(':loc', $loc_id);
foreach($_POST["checkbox2"] as $loc_id) $product_access->execute();

保存后在数组下方。

Array 
( 
       [username] => joshua 
       [rank] => Array 
           ( 
               [0] => 0 
           )
       [koppel] => Array 
             ( 
                 [0] => 1 
             ) 
       [clickedproduct] => Array 
                     ( 
                         [0] => 17 
                     ) 
)

有人可以解释一下解决方案吗?

这种应用程序通常使用元数据表(也称为键/值存储)实现。

此元数据表的每一行标识

  1. 它描述的对象,带有 product_id 或类似的外键。
  2. 它所包含的数据项的名称,例如"价格"或"装载"
  3. 它所保存的数据项的值,例如"6778"或"34"
  4. 可选)标识项目数据类型的代码("钱"?"文本"?

对象添加元数据很容易。在元数据表中插入一行,提供所需的"列名"和值。 检索它有点棘手。例如,您需要像这样的查询。

 SELECT p.product_id, a.val as price, b.val as mount
   FROM product p
   LEFT JOIN metadata a ON a.product_id = p.product_id AND a.key='price'
   LEFT JOIN metadata b ON b.product_id = p.product_id AND b.key='mount'

WordPress的wp_postmeta表设置是这种数据设计模式的一个很好且广泛使用的例子。它有一个可行的API。

生产中使用数据定义语言命令(如ALTER TABLE CHANGE colname newcolname INT)通常被认为是不好的做法。首先,这些命令非常慢且线程不安全。另一方面,当架构包含所有类型的用户定义列时,很难进行故障排除。您最好使用应用程序代码,就像我在这里建议的那样,以允许您的用户创建自己的数据键和值。

  • 在"products_access"中创建名为"custom_column"的列。(添加用户此处定义的列名称)
  • 创建另一个名为"tbl_custom_column"的表
  • 添加字段"user_id"、"custom_column_value"(在此处添加值)

希望这会有所帮助。