1

MySQL GROUP_CONCAT .... INSERT の問題があります このコードは機能します:

    SELECT group_concat(tabel2.img_name separator ',') 
    FROM tabel2 
    GROUP BY tabel2.produit_id 

結果を別のテーブルに挿入する必要があり、立ち往生しています。

これ(または私が考えることができる任意の組み合わせ)は機能しません

    INSERT INTO tabel1.imgname
    SELECT group_concat(tabel2.img_name separator ',') 
    FROM tabel2 
    GROUP BY tabel2.produit_id 
    WHERE tabel1.product_id = tabel2.produit_id

私は何を間違っていますか?

CREATE TABLE IF NOT EXISTS `tabel1` (
  `product_id` int(11) NOT NULL AUTO_INCREMENT,
  `rubrique_id` int(11) NOT NULL,
  `marque_id` int(11) NOT NULL,
  `subfamily_id` int(11) NOT NULL,
  `product_name` varchar(150) NOT NULL,
  `imgname` varchar(255) DEFAULT NULL,
  `product_description1` text NOT NULL,
  `product_description2` text NOT NULL,
  `product_order` int(11) NOT NULL,
  `product_page` int(11) NOT NULL,
  `price_min` float NOT NULL,
  PRIMARY KEY (`product_id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=0;


    INSERT INTO `tabel1` (`product_id`, `rubrique_id`, `marque_id`, `subfamily_id`, `product_name`, `imgname`, `product_description1`, `product_description2`, `product_order`, `product_page`, `price_min`) 
VALUES
(33, 15, 23, 40, 'product 1', NULL, '', '', 0, 0, 0),
(34, 13, 13, 13, 'product 2', NULL, '', '', 0, 0, 0),
(35, 14, 14, 14, 'product 3', NULL, '', '', 0, 0, 0);



CREATE TABLE IF NOT EXISTS `tabel2` (
  `img_id` int(11) NOT NULL AUTO_INCREMENT,
  `img_name` text NOT NULL,
  `article_id` int(11) DEFAULT NULL,
  `produit_id` int(11) DEFAULT NULL,
  `product_select` tinyint(1) DEFAULT NULL,
  PRIMARY KEY (`img_id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=4018 ;

INSERT INTO `tabel2` (`img_id`, `img_name`, `article_id`, `produit_id`, `product_select`) 
VALUES
(4013, 'acoacki086050.jpg', 13342, 33, NULL),
(4014, '32252il6jh2dqex.jpg', NULL, 34, NULL),
(4015, '33265ulrzmgr18w.jpg', NULL, 34, NULL),
(4016, '40334zcfk0c4n67.jpg', NULL, 35, NULL),
(4017, '40473frd4900u82.jpg', NULL, 35, NULL);

たとえば、tabel1.product_id = 34 の場合、tabel1.imgname = 32252il6jh2dqex.jpg,33265ulrzmgr18w.jpg が必要です。

4

3 に答える 3

2

これがあなたがやろうとしていることだと思います:

INSERT INTO tabel1 (product_id,imgname)
SELECT tabel2.produit_id, group_concat(tabel2.img_name separator ',') as imgname
FROM tabel2 
GROUP BY tabel2.produit_id  

更新: スキーマを投稿し、要件を明確にしていただきありがとうございます。

これはあなたのために働くはずです:

UPDATE tabel1
INNER JOIN 
(
SELECT tabel2.produit_id, group_concat(tabel2.img_name separator ',') AS imgname
FROM tabel2 
GROUP BY tabel2.produit_id 
) s ON s.produit_id = tabel1.product_id
SET tabel1.imgname = s.imgname;
于 2012-04-26T18:51:59.180 に答える
1

あなたが説明するのはですUPDATE。ではありませんINSERT

UPDATE
    tabel1 AS t1
  JOIN
    ( SELECT produit_id
           , GROUP_CONCAT(img_name SEPARATOR ',') AS grp_img_name
      FROM tabel2 
      GROUP BY produit_id
    ) AS t2
        ON t2.produit_id = t1.product_id
SET
    t1.imgname = t2.grp_img_name ;

ランダムな暴言:

なぜ、なぜ、なぜあなたはこれらのtable1、、、tabel1tabel2名前tableXを持っているのですか?(テーブル、列、インデックス、制約、データベースの)オブジェクトの名前は、使用法を反映している必要があります。
table1何も言わない。
tabel1名前をスペルチェックしない以外は何も言いません。

外部キー制約で(および結合の結果として)使用される列は、(可能であれば)同じ名前を持つことをお勧めします。imgnameあるテーブルとimg_name別のテーブルにはありません。produit_id一方と他方ではありませんproduct_id。それはあなた、次のプログラマー、そしてSOを介してあなたを助けようとする人たちが、書くのを間違えないようにするのに役立ちますON t2.produit_id = t1.produit_id。結合USING (product_id)の構文ではなく構文が好きな場合にも役立ちます。ON

(更新)
テーブルが異なるソース/データベースからのものであり、それがあなたの選択ではなかったため、異なる名前のようです。それらを扱う作業がたくさんある場合は、統一された/わかりやすい名前になるように変更することをお勧めします。1回限りの作業の場合は、一部のデータを転送/変換するだけで、気にしないでください。

于 2012-04-26T19:56:41.803 に答える
-1

挿入する値が指定されていません

INSERT INTO tabel1.imgname
SELECT group_concat(tabel2.img_name separator ',') 
FROM tabel2 
GROUP BY tabel2.produit_id 
WHERE tabel1.product_id = tabel2.produit_id
VALUES('','')

于 2012-04-26T18:52:40.090 に答える