Получить продукты без продаж за последние 7 дней - PullRequest
0 голосов
/ 10 мая 2019

У меня есть две таблицы продуктов и user_sales.Мне нужно получить продукты, у которых было 0 продаж за последние 7 дней.

Я попробовал какой-то код, который я нашел в переполнении стека с помощью оператора "HAVING", но я узнал, установил ли я ограничение в 12 продуктовчем это не работает.

Может ли кто-нибудь помочь, пожалуйста?

table products

id | title | price | images | description

table user_sales

id | product_id | sale_date | user_owner

Ну, это была упрощенная версия таблиц.Фактический запрос выглядит примерно так:

SELECT `product_store`.`friendly_name`        AS `store_friendly_name`, 
       `api_keys`.`key_data`                  AS `api_data`, 
       `ep`.*, 
       `supplier_store`.`icon`                AS `supplier_store_icon`, 
       `supplier_store`.`internal_name`       AS `supplier_store_internal_name`, 
       `supplier_store`.`friendly_name`       AS `supplier_store_friendly_name`, 
       `supplier_store`.`amazon_type_product` AS 
       `supplier_store_amazon_type_product`, 
       `supplier_store`.`handler`             AS `supplier_store_handler`, 
       `sp`.`extra_data`                      AS `sp_extra_data`, 
       `sp`.`id`                              AS `sp_id`, 
       `sp`.`remote_id`                       AS `sp_remote_id`, 
       `sp`.`url`                             AS `sp_url`, 
       `sp`.`price`                           AS `sp_price`, 
       `sp`.`stock`                           AS `sp_stock`, 
       `sp`.`picture`                         AS `sp_picture`, 
       `sp`.`store_id`                        AS `sp_store_id`, 
       Count(us.date)                         AS sale_date 
FROM   `products` `ep` 
       LEFT JOIN `stores` `product_store` 
              ON `ep`.`store_id` = `product_store`.`id` 
       LEFT JOIN `api_keys` 
              ON `api_keys`.`id` = `ep`.`link_key` 
       LEFT JOIN `products` `sp` 
              ON `ep`.`linked_to` = `sp`.`id` 
       LEFT JOIN `stores` `supplier_store` 
              ON `supplier_store`.`id` = `sp`.`store_id` 
       RIGHT JOIN `user_sales` `us` 
               ON `ep`.`remote_id` = `us`.`remote_id` 
WHERE  `ep`.`user_owner` = '3992' 
       AND `ep`.`expired` = 0 
       AND `us`.`user_id` = '3992' 
       AND us.date > "2019-02-09 14:21:34" 
       AND us.date < "2019-05-10 14:21:34" 
       AND `ep`.`store_id` = 3 
GROUP  BY `ep`.`id` 
HAVING `sale_date` < 1 
ORDER  BY `ep`.`id` DESC 
LIMIT  15 

1 Ответ

0 голосов
/ 10 мая 2019

Вы хотите убедиться, что в течение последних семи дней не было продаж данного продукта.Для этого используйте NOT EXISTS.

Из вашего запроса я понимаю, что вы хотите ограничить это продуктами, относящимися к user_owner 3992, и продажами того же пользователя.

WHERE ep.user_owner = 3992
AND ep.expired = 0 
AND ep.store_id = 3 
AND NOT EXISTS
(
  SELECT *
  FROM user_sales us
  WHERE us.user_id = ep.user_owner
  AND us.date > current_date - interval 7 day
)

Полный запрос:

SELECT product_store.friendly_name         AS store_friendly_name, 
       api_keys.key_data                   AS api_data, 
       ep.*,
       supplier_store.icon                 AS supplier_store_icon, 
       supplier_store.internal_name        AS supplier_store_internal_name, 
       supplier_store.friendly_name        AS supplier_store_friendly_name, 
       supplier_store.amazon_type_product  AS 
       supplier_store_amazon_type_product, 
       supplier_store.handler              AS supplier_store_handler, 
       sp.extra_data                       AS sp_extra_data, 
       sp.id                               AS sp_id, 
       sp.remote_id                        AS sp_remote_id, 
       sp.url                              AS sp_url, 
       sp.price                            AS sp_price, 
       sp.stock                            AS sp_stock, 
       sp.picture                          AS sp_picture, 
       sp.store_id                         AS sp_store_id
FROM products ep 
LEFT JOIN stores product_store ON ep.store_id = product_store.id 
LEFT JOIN api_keys ON api_keys.id = ep.link_key 
LEFT JOIN products sp ON ep.linked_to = sp.id 
LEFT JOIN stores supplier_store ON supplier_store.id = sp.store_id 
WHERE ep.user_owner = 3992
AND ep.expired = 0 
AND ep.store_id = 3 
AND NOT EXISTS
(
  SELECT *
  FROM user_sales us
  WHERE us.user_id = ep.user_owner
  AND us.date > current_date - interval 7 day
)
ORDER  BY ep.id DESC;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...