Получите 2 мета-значения из столбца мета-ключа.

Вопрос или проблема

Я хочу выбрать ‘name’, ‘SKU’ и ‘price’ из 2 таблиц WP: wp_posts и wp_postmeta. Я не знаю, как получить данные из столбца ‘meta_value’ дважды для ‘meta_key’=’_price’ и ‘meta_key’=’_sku’, например.
enter image description here

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

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

Не проверено на 100%, но это может сработать:

SELECT a.post_title, m1.meta_value AS SKU, m2.meta_value AS PRICE
FROM wp_posts a
LEFT JOIN wp_postmeta m1
    ON a.ID = m1.post_id
LEFT JOIN wp_postmeta m2
    ON a.ID = m2.post_id
WHERE a.post_type="product" 
AND m1.meta_key='_sku'
AND m2.meta_key='_price'

Обратите внимание, что поле _price соответствует “цене со скидкой” (если существует), поэтому вы можете также получить “списочную цену”:

SELECT a.post_title, m1.meta_value AS SKU, m2.meta_value AS SALE_PRICE, m3.meta_value AS LIST_PRICE
FROM wp_posts a
LEFT JOIN wp_postmeta m1
    ON a.ID = m1.post_id
LEFT JOIN wp_postmeta m2
    ON a.ID = m2.post_id
LEFT JOIN wp_postmeta m3
    ON a.ID = m3.post_id
WHERE a.post_type="product" 
AND m1.meta_key='_sku'
AND m2.meta_key='_price'
AND m3.meta_key='_regular_price'

query output

Ответ или решение

Чтобы извлечь значения из столбца meta_value для разных ключей meta_key, в данном случае _sku и _price, из двух таблиц WordPress — wp_posts и wp_postmeta, необходимо воспользоваться SQL-запросами с использованием JOIN. Правильная структура запросов обеспечит получение корректных данных. Давайте разберем предложенные решения и объясним, как они работают.

Разбор и объяснение запросов

Базовый запрос

Представленный изначальный запрос имеет следующую форму:

SELECT a.post_title, m1.meta_value AS SKU, m2.meta_value AS PRICE
FROM wp_posts a
LEFT JOIN wp_postmeta m1
    ON a.ID = m1.post_id
LEFT JOIN wp_postmeta m2
    ON a.ID = m2.post_id
WHERE a.post_type="product" 
AND m1.meta_key='_sku'
AND m2.meta_key='_price';

Объяснение:

  1. JOIN: Используется два LEFT JOIN для соединения таблицы wp_posts с двумя экземплярами таблицы wp_postmeta, позволяя получить несколько значений meta_value для одного поста.

  2. Условие отбора: Условия m1.meta_key='_sku' и m2.meta_key='_price' гарантируют, что из таблицы wp_postmeta будут отобраны только те строки, которые содержат необходимые мета-ключи — _sku и _price соответственно.

  3. Результат: Этот запрос вернет список товаров с их названиями (post_title), артикулом (SKU) и ценой (PRICE).

Дополнительный Перечень Цены

Также возможно извлечение "обычной" (или листовой) цены с помощью добавления ещё одного JOIN:

SELECT a.post_title, m1.meta_value AS SKU, m2.meta_value AS SALE_PRICE, m3.meta_value AS LIST_PRICE
FROM wp_posts a
LEFT JOIN wp_postmeta m1
    ON a.ID = m1.post_id
LEFT JOIN wp_postmeta m2
    ON a.ID = m2.post_id
LEFT JOIN wp_postmeta m3
    ON a.ID = m3.post_id
WHERE a.post_type="product" 
AND m1.meta_key='_sku'
AND m2.meta_key='_price'
AND m3.meta_key='_regular_price';

Объяснение:

  • Третье соединение и условие: Добавление LEFT JOIN wp_postmeta m3 и условия AND m3.meta_key='_regular_price' позволяет также получить "листовую" цену для каждого товара.

Заключение

Важно отметить, что использование LEFT JOIN позволяет включить строки из wp_posts, даже если в wp_postmeta не найдется соответствующих мета-значений. Это может быть полезно для получения полного перечня товаров, включая те, для которых отсутствуют заданные мета-данные.

При реализации данных запросов необходимо убедиться, что структура базы данных и именование столбцов точно соответствуют приведённым примерам, иначе существует риск возникновения ошибок или некорректных результатов. Это критично для структуры WordPress, адекватного функционирования интернет-магазинов и сайтов, использующих мета-информацию.

Эти пояснения помогут вам создать более точные и оптимизированные запросы к базе данных WordPress, что, в свою очередь, улучшит обработку данных и производительность вашего приложения или веб-сайта.

Оцените материал
Добавить комментарий

Капча загружается...