MySQL组合了2个表中的一些数据

时间:2015-06-02 01:16:47

标签: mysql sql wordpress

我正在使用高级自定义字段在WordPress网站上工作,如果这有帮助的话。

我有两张表:postspostmeta

帖子

|-------------------------------------------|
|   ID    |   post_title    |   post_type   |
|    1    |     Title 1     |       book    |
|    2    |     Title 1     |      product  |
|    3    |     Title 2     |       book    |
|    4    |     Title 2     |      product  |
|    5    |     Title 3     |       book    |
|    6    |     Title 3     |      product  |
|-------------------------------------------|

发布Meta

|----------------------------------------------------------|
|   post_id       |   meta_key      |      meta_value      |
|        3        |     Rating      |            *****     |
|        3        |    Publisher    |     Julian Celestro  |
|        3        |       Date      |     April 16, 1840   |
|        3        |       Type      |          Hardback    |
|        3        |       Price     |          19.99       |
|        3        |       ISBN      |       1234567890     |
|----------------------------------------------------------|

当然还有其他一些事情发生,但这些都是相关的领域。

所以在帖子表中,有3本书,每本书都有一个书籍编号#和一个产品编号#。

postmeta表包含有关所有这些书籍和产品的信息,方法是将元键和值与帖子ID相关联。

有很多书,我需要一种方法来基本结合这两个表。对于表1中的每个post_title(书名),我想要与产品的post_type(id = 2,4,6)相关联的ID号,并且我希望将其与postmeta表连接。

因此,例如,我想要一个导致返回的MySQL语句:

ID=4, post_title='Title 2', meta_key=rating, meta_value=*****
ID=4, post_title='Title 2', meta_key=Publisher, meta_value=Julian Celestro
ID=4, post_title='Title 2', meta_key=Date, meta_value=April 16, 1840
ID=4, post_title='Title 2', meta_key=Type, meta_value=Hardback
ID=4, post_title='Title 2', meta_key=Price, meta_value=19.99
ID=4, post_title='Title 2', meta_key=ISBN, meta_value=1234567890

我尝试了一些

的内容
SELECT `postmeta`.*
FROM `posts` 
RIGHT JOIN `postmeta` ON posts.id = postmeta.post_id
WHERE `post_type` = 'book'

它(预期)给了我想要的meta_key和meta_value,但它给了我书的post_id而不是产品。

2 个答案:

答案 0 :(得分:0)

添加另一个meta_key'product_id',将meta_value设置为产品的ID,将post_id设置为图书的ID。

然后查询:)

答案 1 :(得分:0)

我认为你的意思是这样的

SELECT p.ID, p.post_title, pm.meta_key, pm.meta_value
FROM `posts` AS p 
RIGHT JOIN `postmeta` AS pm ON p.id = pm.post_id
WHERE `post_type` = 'book'

<强>输出

ID  post_title  meta_key    meta_value
3   Title 2     Rating      *****
3   Title 2     Publisher   Julian Celestro
3   Title 2     Date        April 16, 1840
3   Title 2     Type        Hardback
3   Title 2     Price       19.99
3   Title 2     ISBN        1234567890