3个不同的表有相同的外键,如何select
3 Different tables have same Foreign Key, How to select
假设我有 3 个不同的 tables,它们具有如下相同的外键:-
Table一个product_unit
| id | product_id | weight | status_id |
|:----|--------------|---------|------------:|
| 1 | 4 | 300 | 1 |
| 2 | 5 | 120 | 2 |
Table两个product_package
| id | product_id | weight | status_id |
|:----|--------------|---------|------------:|
| 1 | 4 | 1.2 | 1 |
| 2 | 5 | 480 | 1 |
Table三个product_carton
| id | product_id | weight | status_id |
|:----|--------------|---------|------------:|
| 1 | 4 | 10.2 | 1 |
| 2 | 5 | 4.8 | 2 |
其中tableproduct和statustable如下图:-
一个。 产品table
| id | name |
|:----|--------------:|
| 4 | Choco Cake |
| 5 | Hazelnut Bun |
b。 状态table
| id | description |
|:----|--------------:|
| 1 | Available |
| 2 | Unavailable |
如何从这 3 个 table(product_unit、product_package 和 product_carton)中获取 所有状态 1 个查询 ?
到目前为止,我可以做到这一点:-
$product_info = Product::find()
->select([
'product.name AS productName',
'product_unit.weight AS weightUnit',
'product_package.weight AS weightPackage',
'product_carton.weight AS weightCarton',
'status.description AS statusDesc'])
->leftJoin('product_unit', 'product.id = product_unit.product_id')
->leftJoin('product_package', 'product.id = product_package.product_id')
->leftJoin('product_carton', 'product.id = product_carton.product_id')
->leftJoin('status', 'status.id = product_unit.status_id')
->asArray()
->all();
使用上面的查询我可以从product_unit[=96得到'statusDesc' =] ONLY,因为我 'leftJoin()' status table with product_unit table.
我怎样才能加入另一个2 tables (product_package & product_carton) 并从他们那里得到 statusDesc?有什么方法可以使用 1 Query?
$product_info = Product::find()
->select([
'product.name AS productName',
'product_unit.weight AS weightUnit',
'product_package.weight AS weightPackage',
'product_carton.weight AS weightCarton',
's1.description AS status_unit_Desc'])
's2.description AS status_package_Desc'])
's3.description AS status_carton_Desc'])
->leftJoin('product_unit', 'product.id = product_unit.product_id')
->leftJoin('product_package', 'product.id = product_package.product_id')
->leftJoin('product_carton', 'product.id = product_carton.product_id')
->leftJoin('status AS s1', 's1.id = product_unit.status_id')
->leftJoin('status AS s2', 's2.id = product_package.status_id')
->leftJoin('status AS s3', 's3.id = product_carton.status_id')
->asArray()
->all();
PS。也许inner Join会比left Join更合适?
假设我有 3 个不同的 tables,它们具有如下相同的外键:-
Table一个product_unit
| id | product_id | weight | status_id | |:----|--------------|---------|------------:| | 1 | 4 | 300 | 1 | | 2 | 5 | 120 | 2 |
Table两个product_package
| id | product_id | weight | status_id | |:----|--------------|---------|------------:| | 1 | 4 | 1.2 | 1 | | 2 | 5 | 480 | 1 |
Table三个product_carton
| id | product_id | weight | status_id | |:----|--------------|---------|------------:| | 1 | 4 | 10.2 | 1 | | 2 | 5 | 4.8 | 2 |
其中tableproduct和statustable如下图:-
一个。 产品table
| id | name |
|:----|--------------:|
| 4 | Choco Cake |
| 5 | Hazelnut Bun |
b。 状态table
| id | description |
|:----|--------------:|
| 1 | Available |
| 2 | Unavailable |
如何从这 3 个 table(product_unit、product_package 和 product_carton)中获取 所有状态 1 个查询 ?
到目前为止,我可以做到这一点:-
$product_info = Product::find()
->select([
'product.name AS productName',
'product_unit.weight AS weightUnit',
'product_package.weight AS weightPackage',
'product_carton.weight AS weightCarton',
'status.description AS statusDesc'])
->leftJoin('product_unit', 'product.id = product_unit.product_id')
->leftJoin('product_package', 'product.id = product_package.product_id')
->leftJoin('product_carton', 'product.id = product_carton.product_id')
->leftJoin('status', 'status.id = product_unit.status_id')
->asArray()
->all();
使用上面的查询我可以从product_unit[=96得到'statusDesc' =] ONLY,因为我 'leftJoin()' status table with product_unit table.
我怎样才能加入另一个2 tables (product_package & product_carton) 并从他们那里得到 statusDesc?有什么方法可以使用 1 Query?
$product_info = Product::find()
->select([
'product.name AS productName',
'product_unit.weight AS weightUnit',
'product_package.weight AS weightPackage',
'product_carton.weight AS weightCarton',
's1.description AS status_unit_Desc'])
's2.description AS status_package_Desc'])
's3.description AS status_carton_Desc'])
->leftJoin('product_unit', 'product.id = product_unit.product_id')
->leftJoin('product_package', 'product.id = product_package.product_id')
->leftJoin('product_carton', 'product.id = product_carton.product_id')
->leftJoin('status AS s1', 's1.id = product_unit.status_id')
->leftJoin('status AS s2', 's2.id = product_package.status_id')
->leftJoin('status AS s3', 's3.id = product_carton.status_id')
->asArray()
->all();
PS。也许inner Join会比left Join更合适?