我在一个数据库中有几个表。在表中 products_info 其中一列被命名为 short_description (对产品的简短描述)并具有一定的价值在表中 order-items 我需要加上 short_description 表中有来自简短描述的数据的列 products_info .有什么建议吗?谢谢您。
products_info
short_description
order-items
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”表中的值
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 --> }?>
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数组,您可以在该数组上循环并打印数据。我知道这不是对你问题的直接回答,但这样的回答会让你走上一条不是最佳实践的道路,并在以后给你带来问题。
3条答案
按热度按时间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”表中的值
hmae6n7t2#
您可以将products\U info表和products\U info表与join语句结合起来,而不是不必要的列副本。例如:
您不应该在数据库中创建任何表,您将从php脚本中的查询中获取数据。
可以按以下方式使用查询结果:
zzlelutf3#
问题中有两个表,在同一产品上有不同的细节。您永远不想做的一件事是跨表复制数据。这是浪费资源和风险的完整性的数据。如果一个产品的名称改变了,你将不得不在许多表中修改它。如果您错过了一个,应用程序将有问题,因为它不会总是收到相同的名称。您可以阅读有关数据规范化的内容。
要对两个表执行查询,可以使用联接操作。每个产品都有一个唯一的值,并出现在两个表中,即产品id。
例如,从lcqu\u products\u info获取产品名称
例如,从lcqu\u订单\u项目中获取价格
现在,如果您需要在单个查询中输入名称和价格,请使用产品id连接表:
基于此,您应该从lcqu\u orders\u项中删除“name”列。名称应该从lcqu产品信息中提取,使用上面显示的相同方法。
现在说说你的php代码:
在这段代码中,您需要lcqu\u orders\u items中的这些值
数量:表中
sku:在表中
name:在表中。不应该。它应该取自lcqu产品信息
选项:在表中。
因此,查询应该是:
这个查询的结果将进入$orders数组,您可以在该数组上循环并打印数据。
我知道这不是对你问题的直接回答,但这样的回答会让你走上一条不是最佳实践的道路,并在以后给你带来问题。