Mysql добавить существующий столбец в другую таблицу - PullRequest
0 голосов
/ 11 октября 2018

У меня есть несколько таблиц в базе данных.В таблице products_info один столбец называется short_description (краткое описание продукта) и имеет некоторые значения

I need the value present in the short_description

В таблице order-items Мне нужно добавить столбец short_description с данными из short_description, представленными в таблице products_info.

enter image description here

Есть предложения?Спасибо.

Ответы [ 3 ]

0 голосов
/ 18 октября 2018

У вас есть две таблицы в вопросе, с разными деталями для одних и тех же продуктов.Одна вещь, которую вы никогда не хотите делать, это дублировать данные в разных таблицах.Это растрачивает ресурсы и рискует целостностью данных.Ex.если название продукта изменится, вам придется изменить его во многих таблицах.Если вы пропустите один из них, у приложения возникнут проблемы, поскольку оно не всегда получит одно и то же имя.Вы можете прочитать о нормализации данных.

Чтобы выполнить запросы к двум таблицам, вы используете операцию JOIN.Одно значение, уникальное для каждого продукта и отображаемое в обеих таблицах, это product_id.

Ex, получить имя продукта из lcqu_products_info

SELECT name
FROM lcqu_products_info

Ex, получить цену из lcqu_orders_items

SELECT price
FROM lcqu_orders_items

Теперь, если вам нужно имя И цена в одном запросе, объедините таблицы с идентификатором продукта:

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
  • options: в таблице.

Поэтому запрос должен быть:

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, в котором вы можете зациклить и распечатать данные.


Я понимаю, что это не прямой ответ на ваш вопрос, но такой ответ отправит вас по пути, который не являетсяЛучшая практика, и вы будете испытывать проблемы позже.

0 голосов
/ 20 октября 2018

Сначала создайте столбец с именем short_description в таблице, которую вы хотите enter image description here

После этого напишите небольшой php-код для получения «product_id» и «short_description» из «icqu_products_info table "и используйте" product_id "для обновления значений в таблице" icu_orders_items "

0 голосов
/ 17 октября 2018

Вместо ненужной копии столбца вы можете объединить таблицу 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 -->
}?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...