繁体   English   中英

MySQL连接多个表

[英]MySQL Join Multiple Tables

概述:我正在尝试将多个表连接在一起,以根据提取的数据的值创建一个文本字符串。 我已经到了,我也遇到过需要拉一个点meta_value中的meta_key那等于领域_sku_price 但是,我不知道如何做到这一点。 非常感谢向我指出正确方向的任何帮助。

细节:我想通过创建一个结构如下的字符串为每种可能的产品和车辆配置返回一行:

SKU,年份,品牌,型号,引擎,标题,价格

我有正确数量的结果,但是我不知道如何从wp_postmeta表中获取_price_sku值。

最终输出应如下所示:

2T013-ADU00, 2013, Kia, Optima,   Hybrid, All Weather Floor Mats, 65.60
2T013-ADU00, 2013, Kia, Optima,   SX,     All Weather Floor Mats, 65.60
2T013-ADU00, 2013, Kia, Optima,   EX,     All Weather Floor Mats, 65.60
2T013-ADU00, 2013, Kia, Optima,   LX,     All Weather Floor Mats, 65.60
2T013-ADU00, 2012, Kia, Optima,   LX,     All Weather Floor Mats, 65.60
2T013-ADU00, 2012, Kia, Optima,   EX,     All Weather Floor Mats, 65.60
2T013-ADU00, 2012, Kia, Optima,   SX,     All Weather Floor Mats, 65.60
2T013-ADU00, 2012, Kia, Optima,   Hybrid, All Weather Floor Mats, 65.60
988503W000,  2011, Kia, Sportage, Base,   Wiper Blade,            15.75
988503W000,  2011, Kia, Sportage, EX,     Wiper Blade,            15.75

这是我的PHP

$sql = "
SELECT filter.filterId as Filter, posts.*, model.ModelName as Model, make.MakeName as Make,   year.Year as Year, engine.EngineName as Engine, meta.*
FROM wp_sFilter filter
JOIN wp_posts posts ON filter.productId = posts.ID 
JOIN wp_sModel model ON filter.modelId  = model.modelId 
JOIN wp_sMake make ON filter.makeId  = make.makeId 
JOIN wp_sYear year ON filter.yearId  = year.yearId 
JOIN wp_sEngine engine ON filter.engineId  = engine.engineId 
JOIN wp_postmeta meta ON filter.productId  = meta.post_id 
WHERE post_status = 'publish' 
AND 
post_type = 'product'
AND
meta_key = '_price' OR '_sku'
";


if(!$result = $db->query($sql)){
    die('There was an error running the query [' . $db->error . ']');
}

while($row = $result->fetch_assoc()){
    echo $row['meta_value'].', '.$row['Year'].', '.$row['Make'].', '.$row['Model'].' '.$row['Engine'].', '.$row['post_title'].', '.$row['meta_value'] . '<br />';
}

这是mysql表

wp_posts

ID | post_status | post_type | post_title
---+-------------------------------------------------
9  | published   | product   | All Weather Floor Mats
11 | published   | product   | Wiper Blade

wp_sFilter

filterId | productId | makeId | modelId | yearId | engineID
---------+-----------+--------+---------+--------+---------
8        | 9         | 1      | 1       | 3      | 12
7        | 9         | 1      | 1       | 3      | 17
6        | 9         | 1      | 1       | 3      | 11
5        | 9         | 1      | 1       | 3      | 10
9        | 9         | 1      | 1       | 2      | 5
10       | 9         | 1      | 1       | 2      | 6
11       | 9         | 1      | 1       | 2      | 8
12       | 9         | 1      | 1       | 2      | 9
13       | 11        | 1      | 4       | 5      | 13
14       | 11        | 1      | 4       | 5      | 14

wp_sMake

makeId | MakeName
-------+---------
1      | Kia

wp_sModel

modelId | makeId | ModelName
--------+--------+----------
1       | 1      | Optima
4       | 1      | Sportage

wp_sYear

yearId | makeId | modelId | Year
-------+--------+---------+-----
1      | 1      | 1       | 2011
2      | 1      | 1       | 2012
3      | 1      | 1       | 2013
4      | 1      | 1       | 2014
5      | 1      | 4       | 2011
6      | 1      | 4       | 2012
7      | 1      | 4       | 2013

wp_sEngine

engineId | makeId | modelId | yearId | EngineName
---------+--------+---------+--------+-----------
1        | 1      | 1       | 1      | LX
2        | 1      | 1       | 1      | EX
3        | 1      | 1       | 1      | SX
4        | 1      | 1       | 1      | Hybrid
5        | 1      | 1       | 2      | LX
6        | 1      | 1       | 2      | EX
8        | 1      | 1       | 2      | SX
9        | 1      | 1       | 2      | Hybrid
10       | 1      | 1       | 3      | LX
11       | 1      | 1       | 3      | EX
12       | 1      | 1       | 3      | Hybrid
13       | 1      | 4       | 5      | Base
14       | 1      | 4       | 5      | EX
15       | 1      | 1       | 1      | LX
16       | 1      | 4       | 5      | SX
17       | 1      | 1       | 3      | SX

wp_postmeta

meta_id | post_id | meta_key | meta_value
--------+---------+----------+------------
20      | 9       | _sku     | 2T013-ADU00
24      | 9       | _price   | 65.60
50      | 11      | _sku     | 988503W000
24      | 11      | _price   | 15.75

wp_postmeta表获取价格和sku的一种方法是两次连接到wp_postmeta表。

所以你会做类似的事情

...
JOIN wp_postmeta sku ON filter.productId  = sku.post_id 
JOIN wp_postmeta price ON filter.productId  = price.post_id
...

并将SELECT meta.*替换为sku.meta_value as sku, price.meta_value as price

相应地调整其他部分或代码/ sql,但希望您能理解。

基本上,您需要以sku和价格的形式加入表格。 想象一下,您有一个SKU和价格表,您将如何进行联接,就联接而言,相同的想法就在同一张表中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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