1

こんにちは、データベースにテーブルがあります。

ShopID | ParentID | SELL 

1          0        2,3
2          1        1,2,3
3          1        2,3,4
4          0        5,6
5          4        5,6,7
6          4        6,7,8

SELL親ショップの値に子の値を追加し SELLたいが、重複した値を追加したくない、

最後に、私はこのようなテーブルを持ちたいです

ShopID | ParentID | SELL 

1          0        1,2,3,4
2          1        1,3
3          1        2,4
4          0        5,6,7,8
5          4        5,7
6          4        6,8

これは可能ですかMySQL、助けてください。前もって感謝します 。

4

2 に答える 2

2

これを試して:

SELECT s1.shopid, s1.parentid, IFNULL( s2.sales, s1.SELL ) SELL
FROM shop s1
LEFT JOIN (
  SELECT parentid, GROUP_CONCAT( sell ) sales
  FROM shop
  GROUP BY parentid
)s2 ON s1.ShopId = s2.parentid;

SQL フィドルのデモ

更新クエリ:

 update shop
    SET SELL=s.SELL 
    from shop join (select s1.shopid,s1.parentid,ifnull(s2.sales,s1.SELL) SELL from shop s1 left join 
    (select parentid,group_concat(sell) sales from shop
    group by parentid) s2
    on s1.ShopId=s2.parentid) s
    on shop.shopid = s.shopid
于 2012-11-21T12:35:09.940 に答える
1

新しい列を作成することをお勧めします。

お気に入り :

ShopID | ParentID | SELL | Total Sell

ただし、次のようにレコードごとに 1 つの値を格納するのが最善です。

ShopID | ParentID | SELL 

1          0        2
1          0        3

データを簡単に操作できるようになるよりも...

CREATE TABLE IF NOT EXISTS `sellforce` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `ShopID` int(11) NOT NULL,
  `ParentID` int(11) NOT NULL,
  `Sell` int(11) NOT NULL,
  PRIMARY KEY (`id`)
)

INSERT INTO `sellforce` (`ShopID`, `ParentID`, `Sell`) VALUES
( 1, 0, 2),
( 2, 1, 1),
( 1, 0, 3),
( 2, 1, 3);

CREATE VIEW `sellforce1` AS select `sellforce`.`ShopID` AS `ShopID`,`sellforce`.`ParentID` AS `ParentID`,group_concat(distinct `sellforce`.`Sell` separator ',') AS `GROUP_CONCAT( DISTINCT ``Sell`` )` from `sellforce` group by `sellforce`.`ShopID`;
于 2012-11-21T12:11:31.050 に答える