2013-11-10 2 views
0

Я довольно новичок в sql, поэтому я извиняюсь за это, если это вопрос, связанный с nooby, но я некоторое время ломаю голову и искал google без ответов, так что это последнее мое средство.Идентификация идентификатора группы в sql

Я пытаюсь создать самую продаваемую страницу на моем личном сайте, которая продает самый продаваемый товар за последние 30 дней.

жгутов базы данных есть 2 таблицы для этого: продукты и продукты заказы

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

Таким образом, я вижу, что это единственное, что хорошо для продукта - это название, изображение и цена.

Итак, теперь я смотрю заказы на продукцию, и у этого есть идентификатор продукта и дата продажи.

Так что мой вопрос, как я группа идентификаторы,

, например, если у меня был:

productid = 42, datesold = 2013-11-08 21:11:10 
productid = 11, datesold = 2013-11-08 21:09:10 
productid = 42, datesold = 2013-11-08 21:06:10 
productid = 2, datesold = 2013-11-07 21:11:10 
productid = 11, datesold = 2013-11-06 21:11:10 

Как бы я вернуть его, чтобы он в основном говорит

productid = 42 (sold 2 times) 
productid = 11 (sold 2 times) 
productid = 2 (sold 1 time) 
Может

что-то как это сделать?

Кроме того, я думаю, что я слева присоединиться, который показывает его, но до сих пор не могу получить логику на группе подсчета

Вот слева от меня присоединиться к логике, пожалуйста, обнажить в виду, что это будет PDO, это просто показывая запрос, прежде чем я подготовлю его заявление;)

$ todaysdate = date ('Ymd h: i: s', strtotime («now - 30 days ago»));

SELECT * FROM product_order LEFT JOIN product ON product_order.productId=product.id 
WHERE product_order.modifiedDate >= $todaysdate AND product_order.status = 2 
ORDER BY product_order.modifiedDate DESC; 

Заранее спасибо за любую помощь дали :)

EDIT ::::::::::::::::::::::::::::: :::::::

Ive изменил его, но по какой-то причине его рвало главную ошибку:

SQLSTATE [42000]: ошибка синтаксиса или нарушение прав доступа: 1064 у вас есть ошибка в вашем SQL синтаксиса; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с '15: 14: 13 AND product_order.status = 2 AND product.status = 1 GROUP BY product_o 'по строке 4 Трассировка стека:

Вот SQL-запрос:

$todaysdate = date('Y-m-d G:i:s', strtotime("now - 30 days ago")); 

SELECT product.id, product.name, product.picture, product.mainImage, product_option_detail.price, COUNT(product_order.productId) AS NumberOfOrders FROM product_order 
RIGHT JOIN product ON product_order.productId=product.id 
INNER JOIN product_option_detail ON product_order.productId=product_option_detail.productId 
WHERE product_order.modifiedDate >= {$createddate} AND product_order.status = 2 AND product.status = 1 
GROUP BY product_order.productId 
ORDER BY NumberOfOrders DESC; 
+0

Какие СУБД вы используете? Oracle? Postgres? –

+0

@a_horse_with_no_name его MySQL – Robert

+0

Пожалуйста, поймите, что ваше обновление представляет собой совершенно иную проблему из того, что вы задали на начальном этапе. Вы можете использовать статическое значение в качестве аргумента запроса, чтобы убедиться, что ваш запрос работает правильно. Если вы подтвердили это, пожалуйста, отметьте правильный ответ как принятый и опубликуйте * новый * вопрос. –

ответ

1

используйте GROUP BY сгруппировать строки по ИО и название продукта и использовать count агрегат для подсчета количества заказов для каждого продукта.

SELECT p.id, p.name, count(po.order_id) 
FROM product_order as po 
LEFT JOIN product as p ON po.productId = p.id 
WHERE po.modifiedDate >= $todaysdate AND po.status = 2 
GROUP BY p.id,p.name 
ORDER BY po.modifiedDate DESC; 

больше о группе http://www.w3schools.com/sql/sql_groupby.asp

-1
SELECT p.id, p.name, count(po.order_id) AS ProductSold 
FROM product_order as po 
LEFT JOIN product as p ON po.productId = p.id 
WHERE po.modifiedDate >= $todaysdate 
GROUP BY p.id,p.name 
ORDER BY ProductSold DESC; 
+0

, пожалуйста, воздержитесь от публикации того же ответа, если вы не предоставите никакой дополнительной информации. – Mortalus

Смежные вопросы