我怎么能显示3个表连接的项目

时间:2017-11-15 15:42:44

标签: php mysql laravel eloquent

如何使用product_tbl id显示以下3个表中的项目。

并使用foreach。或者如果有其他方式可以显示它。

The tables

我无法获得第3张桌子或图片表。 使用我现有的代码。 仍然是错误。

$product_list = DB::table('product_tbl')

        ->leftjoin('brand_tbl', 'product_tbl.id', '=', 'brand_tbl.product_id')

        ->select('*')

        ->get();

return vehicles_list;


    $prod_list = array();
    foreach ($product_list as $key => $value) {

        $prod_list [$value->products_name][] = $value;

    }

print_r($prod_list);

请帮我谢谢。

1 个答案:

答案 0 :(得分:0)

如果您的表格结构不是一成不变的,您可以尝试使用以下结构来获得更加规范化和可索引的结构。我做了一些改变 - 将产品更改为类别,将品牌更改为产品。当我使用这些标签时,这些标签对我来说更有意义。我还使用完整的命名空间字段名称来进行连接,而不会使所有字段名称别名。

Visual Representation of a proposed table structure

在本文的底部看到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 )

但是这可能不会像你想要的那样返回你的数据。

Full Query Result

在这种情况下,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

这会产生不重复数据的结果。 Group Concat Query Result

用于创建和填充表的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);