Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите составить запрос (хит продаж), вывести из таблицы позиции которые прода 
V
    Опции темы
bankir
Дата 12.5.2009, 12:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 10.8.2007

Репутация: нет
Всего: нет



Всем привет.
Есть такая задача:

есть таблица orders с полями id, textid, quantity (порядковый номер, айди товара, количество товара) - это архив заказов.
нужно вывести хиты продаж, т.е. позиции которые больше всех продавались по формуле колич товара*колич вхождений этого товара в таблице
на данный момент написал вот так, что выглядит очень коряво и ужасно - через ж..у
Код

$sql="select distinct(textid) from orders";   //запрашиваем уникальные записи
$r=mysql_query($sql);

for ($i=0;$i<mysql_num_rows($r);$i++){
    $f=mysql_fetch_array($r);
    $sql_count="select sum(quantity) from orders where textid='$f[0]'";    //запрашиваем количество
    $r_count=mysql_query($sql_count);
    $f_count=mysql_fetch_array($r_count);
    $array1[]=$f[0];                                               //вот тут вообще идет все через ж, потому что не понял как сортировать ассоц массив
    $array2[]=$f_count[0];
    
}

$array=array_combine($array1,$array2);
arsort($array);                 //сортирую массив
$array1=array_keys($array);
$array2=array_values($array);

for ($i=0;$i<2;$i++){                       //здесь начинаю вывод первых 2 позиций у которых продажи больше всех
    if(isset($array1[$i])){
        $sql="select * from items where textid='$array1[$i]'";
        $r=mysql_query($sql);
        $f=mysql_fetch_array($r);


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

Заранее благодарен.


PM Skype   Вверх
Akina
Дата 12.5.2009, 12:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 1
Всего: 454



Цитата(bankir @  12.5.2009,  13:03 Найти цитируемый пост)
позиции которые больше всех продавались по формуле колич товара*колич вхождений этого товара в таблице

т.е. sum(quantity)*count(quantity), что ли?
Код

$sql="select textid, sum(quantity)*count(quantity) as rank from orders order by rank desc limit 1"; 
$r=mysql_query($sql);


Это сообщение отредактировал(а) Akina - 12.5.2009, 12:29


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
bankir
Дата 12.5.2009, 12:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 10.8.2007

Репутация: нет
Всего: нет



Цитата(Akina @ 12.5.2009,  12:24)
т.е. sum(quantity)*count(quantity), что ли?

наверное я неправильно выразился,
например "арт А1 Кофеварка" встречается в этой таблице 5 раз, по 1шт, 2, 2, 1,3шт соответственно
таким образом общее количество будет 9шт
а "арт А2 Нож" встречается 1 раз с количеством 1шт,
значит хит продаж будет кофеварка со своими 9 штуками.
и мне надо вот так взять например первые 3 позиции с максимальными продажами
PM Skype   Вверх
Akina
Дата 12.5.2009, 12:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 1
Всего: 454



bankir, ты сам себе же и противоречишь. Неужели так трудно понять, что же ТЕБЕ надо?

Цитата(bankir @  12.5.2009,  13:34 Найти цитируемый пост)
мне надо вот так взять например первые 3 позиции с максимальными продажами 

Код

$sql1="select textid, sum(quantity)*count(quantity) as rank from orders order by rank desc limit 3"; 
$sql2="select textid, sum(quantity) as rank from orders order by rank desc limit 3"; 

Выбирай.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
bankir
Дата 12.5.2009, 12:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 10.8.2007

Репутация: нет
Всего: нет



Цитата(Akina @ 12.5.2009,  12:40)
bankir, ты сам себе же и противоречишь. Неужели так трудно понять, что же ТЕБЕ надо?

Цитата(bankir @  12.5.2009,  13:34 Найти цитируемый пост)
мне надо вот так взять например первые 3 позиции с максимальными продажами 

Код

$sql1="select textid, sum(quantity)*count(quantity) as rank from orders order by rank desc limit 3"; 
$sql2="select textid, sum(quantity) as rank from orders order by rank desc limit 3"; 

Выбирай.

к сожалению твой код выдает ошибку
#1140 - Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP columns is illegal if there is no GROUP BY clause 

PM Skype   Вверх
Akina
Дата 12.5.2009, 13:23 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 1
Всего: 454



Ну добавь group by textid


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
bankir
Дата 12.5.2009, 13:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 10.8.2007

Репутация: нет
Всего: нет



всем спасибо, 

сделал так:
Код

SELECT textid, SUM( quantity ) AS  'quant'
FROM orders
GROUP BY textid order by quant desc



Akina спасибо огромное за помощь, твое последнее сообщение не увидел
жаль у меня нет 100 постов, так бы поставил тебе +

Это сообщение отредактировал(а) bankir - 12.5.2009, 13:30
PM Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Базы Данных | Следующая тема »


 




[ Время генерации скрипта: 0.0843 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.