提问者:小点点

MySQL内部连接查询多次从同一表中选择


我相信我已经正确地形成了这个问题的标题,因为我不知道如何形成它。作为一个例子,我总结了下面的问题。

我有一个订单表,它保存了订单的详细信息,比如客户id,adddrest和产品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从inventory表中获取库存详细信息。 我正在运行一个while循环来显示一年的所有数据

while($row=mysqli_fetch_assoc($sql1))

我可以将这个查询分成2个并单独运行库存查询,但是如何组合while循环,因为有时当某些产品不在order表中时也可能存在空查询(取决于order to order,并非所有产品都被订购),所以这是行不通的

while($row=mysqli_fetch_assoc($sql1)) and ($row1=mysqli_fetch_assoc($inv1)) and ($row2=mysqli_fetch_assoc($inv2)) 

10个产品一个

我希望这解释清楚我要做的事。

非常感谢你的帮助,


共1个答案

匿名用户

首先,你有不好的数据库设计和我善意的建议,规范化你的数据库。

其次,如果您不能重新设计DB,您可以使用具有别名的多个联接,例如:

SELECT
    customer.name, customer.address, tbl_order.order_date, 
    tbl_order.product1_id, inv1.product1_name,
    tbl_order.product2_id, inv2.product2_name 
FROM tbl_order 
INNER JOIN customer ON tbl_order.customer_id = customer.id 
INNER JOIN inventory AS inv1 ON tbl_order.product1_id = inv1.id 
INNER JOIN inventory AS inv2 ON tbl_order.product2_id = inv2.id 
WHERE  YEAR(tbl_order.order_date)='$year'