簡體   English   中英

Mysql將現有列添加到另一個表

[英]Mysql add an existing column to another table

我在數據庫中有幾個表。 在表products_info其中一列名為short_description (產品的簡短描述)並具有一些值

我需要short_description中的值

在表order-items我需要添加short_description列以及表products_info存在的short_description數據。

在此輸入圖像描述

有什么建議? 謝謝。

您可以將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 -->
}?>

問題中有兩個表,同一產品上有不同的詳細信息。 您永遠不想做的一件事是跨表重復數據。 它浪費資源並冒着數據完整性的風險。 防爆。 如果產品名稱發生變化,則必須在許多表中對其進行修改。 如果您錯過了一個,那么該應用程序將會出現問題,因為它不會總是收到相同的名稱。 您可以閱讀有關數據規范化的信息。

要對兩個表執行查詢,請使用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中刪除“name”列。 應使用上面顯示的相同方法從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數組,您可以在其中循環和打印數據。


我知道這不是你問題的直接答案,但這樣的答案會讓你走上一條不是最佳實踐的道路,並在以后引起你的問題。

首先在所需的表中創建名為short_description的列 在此輸入圖像描述

之后寫一個小的PHP代碼,用於從“icqu_products_info表”獲取“product_id”和“short_description”,並使用“product_id”更新“icu_orders_items”表中的值

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM