MySQL将现有列添加到另一个表

时间:2018-10-11 08:34:35

标签: mysql database

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

I need the value present in the short_description

在表order-items中,我需要添加short_description列以及表products_info中存在的short_description数据。

enter image description here

有什么建议吗? 谢谢。

3 个答案:

答案 0 :(得分:3)

您可以将products_info表和products_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 -->
}?>

答案 1 :(得分:1)

问题中有两个表格,同一产品的详细信息不同。您永远不想做的一件事是跨表重复数据。它浪费资源,并冒着数据完整性的风险。例如如果产品名称更改,则必须在许多表格中对其进行修改。如果您错过了一个应用程序,则该应用程序将出现问题,因为它不会总是收到相同的名称。您可以阅读有关数据标准化的信息。

要对两个表执行查询,请使用JOIN操作。每个产品唯一且在两个表中都出现的一个值是product_id。

例如,从lcqu_products_info获取产品名称

SELECT name
FROM lcqu_products_info

例如,从lcqu_orders_items获取价格

SELECT price
FROM lcqu_orders_items

现在,如果您需要在单个查询中输入名称和价格,则将表与product_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_orders_items中删除“名称”列。名称应使用上面显示的相同方法从lcqu_products_info中提取。


现在介绍您的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_orders_items中的这些值

  • 数量:在表格中
  • sku:在表格中
  • 名称:在表中。不应该是。它应该取自lcqu_products_info
  • 选项:在表格中。

因此查询应为:

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数组中,您可以在该数组上循环并打印数据。


我知道这不是您问题的直接答案,但是这样的答案会使您走上一条并非最佳实践的道路,并在以后给您带来麻烦。

答案 2 :(得分:-1)

首先在您要enter image description here的表中创建一个名为short_description的列

之后,编写一个小的php代码,以从“ icqu_products_info表”中获取“ product_id”和“ short_description”,并使用“ product_id”更新“ icu_orders_items”表中的值