更新自定义列值sql

时间:2016-02-18 11:33:24

标签: php mysql pdo enums

当外面的拳击思维。我提出了以下解决方案:

$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表,用户可以在其中添加带有 enum 值的自定义列。但是用户也可以更新此列的值。我无法设置任何列名,因为它们都是由用户自定义的,因此没有列名。

我的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 
                     ) 
)

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

2 个答案:

答案 0 :(得分:1)

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

此元数据表的每一行都标识

  1. 它描述的对象,带有product_id或类似的外键。
  2. 它所拥有的数据项的名称,例如&#39;价格&#39;或者&#39; mount&#39;
  3. 它所持有的数据项的价值,e,g,&#39; 6778&#39;或&#39; 34&#39;
  4. 可选择识别商品数据类型的代码(&#39; money&#39;?&#39; text&#39;?)
  5. 向对象添加元数据很容易。在元数据表中插入一行,给出&#34;列名称&#34;你想要的和价值。检索它有点棘手。例如,您需要一个查询。

     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 table设置是此数据设计模式的一个很好且广泛使用的示例。它有一个workable API

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

答案 1 :(得分:0)

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

希望这会有所帮助。

相关问题