mysql将现有列添加到另一个表中

v8wbuo2f  于 2021-06-18  发布在  Mysql
关注(0)|答案(3)|浏览(422)

我在一个数据库中有几个表。在表中 products_info 其中一列被命名为 short_description (对产品的简短描述)并具有一定的价值

在表中 order-items 我需要加上 short_description 表中有来自简短描述的数据的列 products_info .

有什么建议吗?谢谢您。

3gtaxfhh

3gtaxfhh1#

首先在所需的表中创建一个名为short\u description的列

之后,编写一个小php代码,从“icqu\u products\u info table”获取“product\u id”和“short\u description”,并使用“product\u id”更新“icu\u orders\u items”表中的值

hmae6n7t

hmae6n7t2#

您可以将products\U info表和products\U info表与join语句结合起来,而不是不必要的列副本。例如:

SELECT order_items.*,
       products_info.short_description
FROM order_items
LEFT JOIN products_info ON order_items.product_id = products_info.product_id

您不应该在数据库中创建任何表,您将从php脚本中的查询中获取数据。
可以按以下方式使用查询结果:

<?php 
$sql = "SELECT lcqu_orders_items.*, lcqu_products_info.short_description FROM lcqu_orders_items LEFT JOIN lcqu_products_info ON lcqu_orders_items.product_id = lcqu_products_info.product_id" 
// run query 
?>

<?php foreach ($order['items'] as $item) { ?> 
    <tr> 
        <td><?php echo (float)$item['quantity']; ?></td> 
        <td><?php echo $item['sku']; ?></td> 
        <td><?php echo $item['sku']; ?></td> 
        <--! showing short description -->
        <td><?php echo $item['lcqu_products_info.short_description']; ?></td> 
        <td style="white-space: normal;"><?php echo $item['name']; ?> 
        <?php if (!empty($item['options'])) { 
           foreach ($item['options'] as $key => $value) {
               echo '<br />- '.$key .': '. $value;
          } 
        }?>
     <!-- another code -->
}?>
zzlelutf

zzlelutf3#

问题中有两个表,在同一产品上有不同的细节。您永远不想做的一件事是跨表复制数据。这是浪费资源和风险的完整性的数据。如果一个产品的名称改变了,你将不得不在许多表中修改它。如果您错过了一个,应用程序将有问题,因为它不会总是收到相同的名称。您可以阅读有关数据规范化的内容。
要对两个表执行查询,可以使用联接操作。每个产品都有一个唯一的值,并出现在两个表中,即产品id。
例如,从lcqu\u products\u info获取产品名称

SELECT name
FROM lcqu_products_info

例如,从lcqu\u订单\u项目中获取价格

SELECT price
FROM lcqu_orders_items

现在,如果您需要在单个查询中输入名称和价格,请使用产品id连接表:

SELECT pi.name, oi.price
FROM lcqu_products_info AS pi
LEFT JOIN lcqu_orders_items AS oi ON pi.product_id = oi.product_id

基于此,您应该从lcqu\u orders\u项中删除“name”列。名称应该从lcqu产品信息中提取,使用上面显示的相同方法。
现在说说你的php代码:

<?php 
    foreach ($order['items'] as $item) 
    { 
?> 
    <tr>
        <td>
            <?php echo (float)$item['quantity']; ?>
        </td> 
        <td>
            <?php echo $item['sku']; ?>
        </td> 
        <td style="white-space: normal;">
            <?php echo $item['name']; ?> 
            <?php 
                if (!empty($item['options'])) 
                { 
                    foreach ($item['options'] as $key => $value) 
                    { 
                        echo '<br />- '.$key .': '. $value; 
                    } 
                } 
            ?>

在这段代码中,您需要lcqu\u orders\u items中的这些值
数量:表中
sku:在表中
name:在表中。不应该。它应该取自lcqu产品信息
选项:在表中。
因此,查询应该是:

SELECT oi.quantity, oi.sku, pi.name, oi.options
FORM lcqu_orders_items AS oi
LEFT JOIN lcqu_products_info AS pi ON oi.product_id = pi.product_id

这个查询的结果将进入$orders数组,您可以在该数组上循环并打印数据。
我知道这不是对你问题的直接回答,但这样的回答会让你走上一条不是最佳实践的道路,并在以后给你带来问题。

相关问题