Получить 2 мета-значения из столбца мета-ключа - PullRequest
0 голосов
/ 19 февраля 2020

Мне нужно использовать библиотеку для экспорта названий продуктов, SKU и цен в один файл CSV. Эта библиотека подключается с использованием PDO и требует SQL запроса.

Я хочу выбрать 'name', 'SKU' и 'price' из 2 таблиц WordPress, а именно wp_posts и wp_postmeta.

Я не знаю, как получить данные из столбца «meta_value» дважды для «meta_key» = «_ price» и «meta_key» = «_ sku», напр.

phpMyAdmin WordPress table

Мой текущий запрос:

"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'"

1 Ответ

0 голосов
/ 19 февраля 2020

Похоже, что вы могли бы сделать с объединением, поэтому вы связываете метаинформацию с нужными сообщениями.

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

Это предполагает, что Столбец id в wp_posts равен 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    | sku    | price
--------------|--------|------
Cheddar       | CHE001 | 2.45
Red Leicester | CHE002 |
...

Я надеюсь, что это помогает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...