テーブル構造が石で設定されていない場合は、より正規化され、索引付け可能な構造のために、次の構造を試してみてください。私はいくつかの変更を加えました - 製品をカテゴリに、ブランドを製品に変更しました。これらのラベルは、私がこれを使って作業していたとき、私にはもっと意味がありました。また、すべてのフィールド名にエイリアスを付けずに、結合を可能にする完全な名前空間のフィールド名を実行します。 SQLを生成し、これらのテーブルその後、別のクエリは間違いなく役立つ
は、この記事の一番下を参照してください。あなたはあなたのコードの画像テーブルに参加していません。 select * from so_category
left outer join so_product on (product_category_id = category_id)
left outer join so_picture on (picture_category_id = category_id)
しかし、消費したいと思うようなデータは返されません。
その場合Mysql Group Concat Functionは役立つかもしれません。
SELET
so_category.*,
so_product.*,
(select GROUP_CONCAT(DISTINCT picture_url order by picture_url asc separator ",")) AS images
FROM so_category
LEFT OUTER JOIN so_product ON (product_category_id = category_id)
LEFT OUTER JOIN so_picture ON (picture_category_id = category_id)
GROUP BY product_id
データが重複しない結果が得られます。
テーブルを作成および移入するSQL。
-- Create syntax for TABLE 'so_category'
CREATE TABLE `so_category` (
`category_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`category_name` varchar(255) DEFAULT NULL,
PRIMARY KEY (`category_id`)
) ENGINE=InnoDB CHARSET=utf8;
-- Create syntax for TABLE 'so_picture'
CREATE TABLE `so_picture` (
`picture_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`picture_url` varchar(100) DEFAULT NULL,
`picture_category_id` int(11) unsigned DEFAULT NULL,
PRIMARY KEY (`picture_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- Create syntax for TABLE 'so_product'
CREATE TABLE `so_product` (
`product_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`product_name` varchar(100) DEFAULT NULL,
`product_brand_id` int(11) unsigned DEFAULT NULL,
`product_category_id` int(11) unsigned DEFAULT NULL,
PRIMARY KEY (`product_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `so_category` (`category_id`, `category_name`)
VALUES
(1, 'chocolate'),
(2, 'flower');
INSERT INTO `so_picture` (`picture_id`, `picture_url`, `picture_category_id`)
VALUES
(1, 'dmc1', 1),
(2, 'dmc2', 1),
(3, 'dmc3', 2),
(4, 'dmc4', 2),
(5, 'dmc5', 2);
INSERT INTO `so_product` (`product_id`, `product_name`, `product_brand_id`, `product_category_id`)
VALUES
(1, 'hershey', NULL, 1),
(2, 'tobleron', NULL, 1),
(3, 'oreo', NULL, 1),
(4, 'roses', NULL, 2),
(5, 'sunflower', NULL, 2);
Eloquent Relationshipsを使用するとよいでしょう。これらのことはもっと簡単になります。 –