[英]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.