我在数据库中有几个表。在表products_info
中,其中一列被命名为short_description
(产品的简短描述)并具有一些值
在表order-items
中,我需要添加short_description
列以及表products_info
中存在的short_description数据。
有什么建议吗? 谢谢。
答案 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中的这些值
因此查询应为:
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)