2014-08-29 2 views
0

У меня есть запрос ниже, чтобы проверить непроданные продукты в моем магазине oscommerce.Запрос с диапазоном дат для непроданных продуктов в oscommerce

$ products_query_raw = " выберите p.products_id, p.products_quantity, p.products_model, pd.products_name из (". TABLE_PRODUCTS "р". TABLE_PRODUCTS_DESCRIPTION. "PD) LEFT JOIN". TABLE_ORDERS_PRODUCTS . "op ON p.products_id = op.products_id, где op.products_id IS NULL и p.products_id = pd.products_id order by p.products_model";

Это похоже на работу, но я хочу ограничить его поиском непроданных продуктов в пределах диапазона дат. Даты для заказов расположены в таблице ORDERS и заказанных продуктах в таблице ORDER_PRODUCTS.

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

ответ

1

Я буквально задал почти этот же вопрос сегодня утром, но в более общих терминах MySQL Querying Multiple Tables.

@evanv проделали большую работу, объясняя выходку его ... Кроме того, @aphextwix отметил отличный учебник для использования JOIN и http://www.sitepoint.com/understanding-sql-joins-mysql-database/

та часть, которая была завинчивания меня была ВЛЕВО JOIN и суб- запрос.

Вот запрос, я думаю, что вы хотите с точки зрения OScommerce ...

$number_of_days = "7"; 
$unsold_products_query = tep_db_query("SELECT a.* FROM " . TABLE_PRODUCTS . " AS a LEFT JOIN (SELECT products_id FROM " . TABLE_ORDERS_PRODUCTS . " as b INNER JOIN " . TABLE_ORDERS . " AS c ON b.orders_id = c.orders_id WHERE c.date_purchased >= date_sub(c.date_purchased, INTERVAL " . $number_of_days . " day) GROUP BY products_id) AS d ON a.products_id = d.products_id WHERE d.products_id IS NULL"); 
$unsold_products_array = tep_db_fetch_array($unsold_products_query); 

Вы, конечно, нужно заменить c.date_purchased в функции DATE_SUB(), если вы хотите использовать дату, кроме дату последней покупки этого товара.

Надеюсь, это поможет.