【发布时间】:2020-10-25 17:31:54
【问题描述】:
我相信我已经正确地形成了这个问题的标题,因为我不确定如何形成它。例如,我在下面总结了我的查询。
我有一个订单表,其中保存了订单详细信息,例如客户 ID、地址和产品 ID,以及连续每个订单的订购数量。因此,多个库存/产品 ID 保存在一行中。
所以我的查询看起来像:这是一个汇总查询,以便于解释我省略了其他各种字段。
SELECT customer.name,customer.address,tbl_order.order_date,tbl_order.product1_id,tbl_order.product2_id,inventory.product1_name,inventory.product2_name
FROM tbl_order
INNER JOIN customer ON tbl_order.customer_id = customer.id
INNER JOIN inventory on tbl_order.product1_id = inventory.id
INNER JOIN inventory on tbl_order.product2_id = inventory.id
where YEAR(tbl_order.order_date)='$year'
所以我的问题是如何根据 tbl_order 中的每个产品 ID 从库存表中获取库存详细信息。我正在运行一个while循环来显示一年的所有数据
while($row=mysqli_fetch_assoc($sql1))
我可以将此查询分为 2 并单独运行库存查询,然后如何组合 while 循环,因为有时当某些产品不在订单表中时也可能存在空查询(取决于订购的订单,而不是全部产品已订购)所以这不起作用
while($row=mysqli_fetch_assoc($sql1)) and ($row1=mysqli_fetch_assoc($inv1)) and ($row2=mysqli_fetch_assoc($inv2))
10 种产品一个
【问题讨论】:
-
这不是一个很好的数据库设计。如果一个订单有多个产品,最好有两个单独的表:一个用于订单,另一个用于订单中的每个产品。
-
如果每个订单最多可以有 10 个产品,那么在加入客户和库存之前,最好使用 union all 来“规范化”订单 - 这可能不会很快,但您会受到设计的限制。 .
-
另见关于sql注入以及准备和绑定查询的重要性,并注意函数不能使用索引,因此范围条件会更好
-
感谢 db design que 的各位,不幸的是,目前无法对 DB 进行更改。 :(
标签: mysql while-loop inner-join