简体   繁体   中英

How could i display the items from 3 tables joined

How could i display the items from 3 tables below joining using the product_tbl id.

and using foreach. or if there is any alternative way to display it.

The tables

I couldn't get the 3rd table or pictures table. using my existing code below. still error.

$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);

please help me thank you.

If your table structure isn't set in stone you might try the following structure for a more normalized and indexable structure. I made some changes - changing product to category, and brand to product. These labels made more sense to me as I worked with this. I also do full namespaced field names to make joining possible without aliasing all field names.

拟议表结构的视觉表示

see the bottom of this post for the SQL to generate and populate these tables

Then a different query will definitely help. You're not joining on the picture table in your code.

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 )

But this will probably not return your data like you want to consume it.

完整查询结果

In which case the Mysql Group Concat Function might help.

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

Which yields results that do not duplicate data. 组Concat查询结果

SQL to create and populate tables.

-- 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);

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM