MySQL得到了所有的父母

时间:2018-03-09 15:18:39

标签: mysql

我们有订单和RMA。可以使用订单的order_products创建RMA。如果在RMA中发送新产品,产品也可以添加到新的RMA中,依此类推。

现在,例如,我有一个带有RMA订单的订单的原理图结构。

Order (1)
  |-> RMA (2)
    |-> RMA (3)
      |-> RMA (4)
        |-> RMA (5)

现在我想从RMA(5)一路向上,一直向上。所以实际上我想从数据库中获取包含所有RMA和原始订单的5条记录(全部来自order表)。考虑到下面显示的数据库结构,我该怎么做呢。

这是SQLFiddle

CREATE TABLE `order` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `type` varchar(5) DEFAULT NULL,
  `description` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;

CREATE TABLE `order_product` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `order_id` int(11) DEFAULT NULL,
  `description` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;

CREATE TABLE `order_rma_product` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `order_id` int(11) DEFAULT NULL,
  `order_product_id` int(11) DEFAULT NULL,
  `description` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;

INSERT INTO `order` (`id`, `type`, `description`)
VALUES
    (1, 'order', 'Original order'),
    (2, 'rma', 'RMA of order 1'),
    (3, 'rma', 'RMA of order 2'),
    (4, 'rma', 'RMA of order 3'),
    (5, 'rma', 'RMA of order 4');

INSERT INTO `order_product` (`id`, `order_id`, `description`)
VALUES
    (1, 1, 'Product'),
    (2, 2, 'Product'),
    (3, 3, 'Product'),
    (4, 4, 'Product');

INSERT INTO `order_rma_product` (`id`, `order_id`, `order_product_id`, `description`)
VALUES
    (1, 2, 1, 'Return product'),
    (2, 3, 2, 'Return product'),
    (3, 4, 3, 'Return product'),
    (4, 5, 4, 'Return product');

我试过这个,但是这给了我一行,所以我试着用contact_ws将它们全部放在列上。但这仅适用于给定的JOINS集,因此不能无限制地上升。

SELECT CONCAT_WS(',', op.order_id, op1.order_id, op2.order_id)
FROM `order` o
JOIN order_rma_product orp ON o.id = orp.order_id
JOIN order_product op ON orp.order_product_id = op.id

JOIN order_rma_product orp1 ON op.order_id = orp1.order_id
JOIN order_product op1 ON orp1.order_product_id = op1.id

JOIN order_rma_product orp2 ON op1.order_id = orp2.order_id
JOIN order_product op2 ON orp2.order_product_id = op2.id

WHERE o.id = '5'; 

0 个答案:

没有答案