MySQL加入多个表

时间:2014-11-17 19:58:07

标签: php mysql database mysqli

概述: 我试图将几个表连接在一起,以创建一个根据提取数据的值构建的文本字符串。我已经遇到了需要提取等于meta_valuemeta_key的{​​{1}}字段_sku的问题。但是,我无法弄清楚这是如何完成的。非常感谢任何指导我正确方向的帮助。

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

SKU,年份,品牌,型号,发动机,标题,价格

我有正确的结果数量,但我无法弄清楚如何从_price表中获取_price_sku值。

最终输出应如下所示:

wp_postmeta

这是我的 PHP

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

这里是 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

1 个答案:

答案 0 :(得分:0)

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
...

并使用meta.*

替换SELECT中的sku.meta_value as sku, price.meta_value as price

相应地调整其他部分或代码/ sql,但希望你明白了。

基本上这个想法是你需要加入桌子作为sku和价格。想象一下,你有一个sku和价格表,你将如何进行连接,就连接而言,它们只是在同一个表中。