【问题标题】:MySQL combining some data from 2 tablesMySQL结合了2个表中的一些数据
【发布时间】:2015-08-15 15:21:25
【问题描述】:

我正在使用高级自定义字段开发 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  |
|-------------------------------------------|

发布元

|----------------------------------------------------------|
|   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 本书,每本书都有一个 book id# 和一个 product id#。

postmeta 表包含所有这些书籍和产品的信息,通过将元键和值与 post 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 而不是产品。

【问题讨论】:

    标签: mysql sql wordpress


    【解决方案1】:

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

    然后查询:)

    【讨论】:

      【解决方案2】:

      我认为你的意思是这样的

      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
      

      【讨论】:

      • 在这种情况下寻找输出 ID 为 4。我希望输出的 ID 显示 SELECT p.id FROM posts WHERE post_type = 'product' 的结果,但我希望输出的其余部分位于 post_type = 'book'
      • @akschoeck 除了书名之外,这本书和产品之间没有任何关系!这不是一件聪明的事情,请再次检查我的答案。
      • @Hakem 是对的。这两个表之间应该有关系。在您的示例数据中,这些元值被分配给 post_Id = 3
      • @sqluser 这就是他正在尝试做的事情:SELECT p.ID,prod.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 JOIN posts AS prod on prod.post_title = p.post_title WHERE p.post_type = 'book'
      • 几分钟后将尝试其中的一些建议。 @Hakem,我对将帖子重命名为 p 然后再次将帖子重命名为 prod 的别名用法有点困惑。第二个别名声明是否做了一些将其保留为 p 不会做的事情?
      猜你喜欢
      • 2012-07-16
      • 1970-01-01
      • 1970-01-01
      • 2023-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多