Mysql 从元键列中获取2个元值

Mysql 从元键列中获取2个元值,mysql,wordpress,phpmyadmin,Mysql,Wordpress,Phpmyadmin,我需要使用一些库将产品名称、SKU和价格导出到一个CSV文件中。此库使用PDO连接,需要SQL查询 我想从两个WordPress表格中选择“名称”、“SKU”和“价格”,即wp_posts和wp_Posteta 我不知道如何从“meta_-value”列中两次获取“meta_-key”=“u-price”和“meta_-key”=“u-sku”的数据,例如 我当前的查询: "SELECT a.post_title, m1.meta_value, m2.meta_value FROM wp_pos

我需要使用一些库将产品名称、SKU和价格导出到一个CSV文件中。此库使用PDO连接,需要SQL查询

我想从两个WordPress表格中选择“名称”、“SKU”和“价格”,即wp_posts和wp_Posteta

我不知道如何从“meta_-value”列中两次获取“meta_-key”=“u-price”和“meta_-key”=“u-sku”的数据,例如

我当前的查询:

"SELECT a.post_title, m1.meta_value, m2.meta_value FROM wp_posts a, wp_postmeta m1, wp_postmeta m2
        WHERE a.post_type='product' AND m1.post_id = a.ID
        AND m1.meta_key='_sku'
        AND m2.meta_key='_price'"

听起来你可以使用连接,因此你将元信息关联到正确的帖子

SELECT
  post.post_title,
  meta.meta_value
FROM wp_posts AS post
LEFT JOIN wp_postmeta AS meta
  ON post.post_id = meta.post_id
WHERE post.post_type = 'product'
  AND meta.meta_key IN ('_sku', '_price')
示例结果:

post_title    | meta_value
--------------|-----------
Cheddar       | CHE001
Cheddar       | 2.45
Red Leicester | CHE002
...
post_title    | sku    | price
--------------|--------|------
Cheddar       | CHE001 | 2.45
Red Leicester | CHE002 |
...
这假设wp_posts中的id列是post_id

需要注意的是,这将为每个帖子返回最多两行,这取决于它是否有一个_sku和_price的元行。如果您需要将所有数据都放在同一行中进行导出,则可能需要类似以下内容:

SELECT
  post.post_title,
  metaSku.meta_value AS sku,
  metaPrice.meta_value AS price
FROM wp_posts AS post
LEFT JOIN (
  SELECT
    *
  FROM wp_postmeta
  WHERE meta_key = '_sku'
) AS metaSku
  ON post.post_id = metaSku.post_id
LEFT JOIN (
  SELECT
    *
  FROM wp_postmeta
  WHERE meta_key = '_price'
) AS metaPrice
  ON post.post_id = metaPrice.post_id
WHERE post.post_type = 'product'
示例结果:

post_title    | meta_value
--------------|-----------
Cheddar       | CHE001
Cheddar       | 2.45
Red Leicester | CHE002
...
post_title    | sku    | price
--------------|--------|------
Cheddar       | CHE001 | 2.45
Red Leicester | CHE002 |
...

我希望这能有所帮助。

你好,marcinłyczko。您的错误是什么?非常感谢:-@marcinłyczko如果您对我的答案感到满意,请将其标记为已接受的答案: