ВОПРОС
Я пытаюсь сделать скрипт статистики, который бы четко использовался для резервирования продуктов для Woocommerce, просмотра, доступности и бронирования. Статусы доступны в административной панели бэкэнда, но мне нужно сделать подсчет и видимым во внешнем интерфейсе.
Пример:
- Наименование товара
- В наличии: 10
- Товары уже зарезервированы (но еще не оплачены): X
- Продано предметов: Y
В настоящее время в woocommerce есть функция, которая показывает количество проданных товаров по каждому продукту, но учитывает как зарезервированные (ожидающие статус), так и проданные (выполненные), поэтому это другой вид подсчета.
Я написал запрос, который должен найти заказы, соответствующие статусу ожидания (wp_term_relationships.term_taxonomy_id = 46 ), но я не могу выбрать только один конкретный продукт, так как он учитывает все отложенные заказы в базе данных. Идентификатор продукта одинаков для wp_posts.ID и wp_woocommerce_order_itemmeta.meta_value = 250 .
Обратите внимание, что продукт и заказы находятся в одной таблице: wp_posts .
Вотмойзапрос:
SELECT COUNT(DISTINCT wp_posts.ID)
FROM wp_posts, wp_postmeta, wp_term_relationships, wp_woocommerce_order_itemmeta oi
WHERE wp_posts.ID = wp_postmeta.post_id
AND wp_posts.post_status = 'publish'
AND wp_posts.ID = wp_postmeta.post_id
AND oi.meta_key = '_product_id'
AND oi.meta_value = 250
AND wp_posts.post_type = 'shop_order'
AND wp_term_relationships.object_id = wp_posts.ID
AND wp_term_relationships.term_taxonomy_id = 46
Любые идеи, как выбрать рассчитывать только для этого продукта? Заранее спасибо.
ОТВЕТ
Как я и подозревал, мне нужно было отфильтровать еще одну таблицу, и это сработало!
Итак, недостающая строка : ii.order_id = wp_posts.ID и некоторые другие хитрости;)
SELECTCOUNT(DISTINCTwp_posts.ID)
FROMwp_posts, wp_postmeta, wp_term_relationships, wp_woocommerce_order_itemmeta oi, wp_woocommerce_order_items ii
WHEREwp_term_relationships.term_taxonomy_id = (xx – orderstatus id)
AND wp_term_relationships.object_id = wp_posts.ID
ANDoi.order_item_id = ii.order_item_id
ANDoi.meta_key = ‘_product_id’
ANDoi.meta_value = (yy – specific product id, the same id asinwp_posts)
ANDii.order_id = wp_posts.ID
ANDwp_postmeta.post_id = wp_term_relationships.object_id
ANDwp_posts.post_status = ‘publish’
Убедитесь, что вы не выбрали тип записи «shop_order», так как он даст неправильный результат 🙂 и обратите внимание, что у статуса «Полное» может быть немного больше значений, поскольку у woocommerce разные значения состояния для выполненного, удаленного, оплаченного и отмененного заказа.