Mishanja
Новичок
Подсчет рейтинга товаров
Добрый день уважаемые программисты!
Есть вопрос, а точнее задачка.
- Есть таблица MySQL с товарами в которой для нас имеют значение следующие поля:
- prod_id (ID товара);
- views (количество просмотров информации о товаре);
- orders (количество покупок товара);
- rating (рейтинг товара (от 1 до 5);
- На отдельной странице я вывожу список всех товаров, при этом могу их сортировать по рейтингу (select *** from *** order by rating DESC/ACS). С этой странички можно попасть на страничку с детальным описанием товара, в этом случае в поле views соответственно ID товара к существующему значению прибавляется единичка. Можно купить товар, и тогда в поле buys добавится единичка.
- Задача состоит в том, чтобы определить рейтинг товара от 1 до 5 учитывая только количество просмотров и количество покупок.
Логика определения рейтинга такова:
Рейтинг = количество просмотров + количество покупок * 5
При помощи нехитрого запроса из базы, цикла while и mysql_fetch_row мне удалось создать массив, в котором ключами явлются ID товаров а значениями рейтинг по формуле.
Т.е. примерно так
1 => 15
2 => 98
3 => 87
4 => 55
5 => 1
6 => 18
и т.д. по количеству товаров в таблице
Теперь самое сложное (для меня):
Как определить рейтинг от 1 до 5 для каждого товара.
Подумал, может можно сделать следующим образом:
1. Сортирую массив с сохранением ключей по убыванию: arsort
2. Далее считаю сколько всего элементов в массиве: count
3. Считаю сколько элементов в массиве может быть с определенным рейтингом (получаю $n). Т.е. если рейтингов всего 5, то я делю количество элементов массива на 5 и округляю (ceil) результат в большую сторону.
4. И вот далее я застопорился. Т.е. мне надо первым n элементам присвоить рейтинг пять, следующим n элементам присвоить четыре, следующим 3, следующим 2, а остальным 1.
5. Уже после этого разнести результаты по базе, поставив соответствующему ID товара соответствующий рейтинг.
Вот не знаю как пункт 4 реализовать. Толи городить циклы с использованием next то ли еще как-то.
Соответственно вопросы:
- Стоит ли городить такую кашу или есть более простой способ.
- Если способа нет, то как лучше реализовать пункт 4.
Заранее благодарю. Извините если очень много текста получилось.
Добрый день уважаемые программисты!
Есть вопрос, а точнее задачка.
- Есть таблица MySQL с товарами в которой для нас имеют значение следующие поля:
- prod_id (ID товара);
- views (количество просмотров информации о товаре);
- orders (количество покупок товара);
- rating (рейтинг товара (от 1 до 5);
- На отдельной странице я вывожу список всех товаров, при этом могу их сортировать по рейтингу (select *** from *** order by rating DESC/ACS). С этой странички можно попасть на страничку с детальным описанием товара, в этом случае в поле views соответственно ID товара к существующему значению прибавляется единичка. Можно купить товар, и тогда в поле buys добавится единичка.
- Задача состоит в том, чтобы определить рейтинг товара от 1 до 5 учитывая только количество просмотров и количество покупок.
Логика определения рейтинга такова:
Рейтинг = количество просмотров + количество покупок * 5
При помощи нехитрого запроса из базы, цикла while и mysql_fetch_row мне удалось создать массив, в котором ключами явлются ID товаров а значениями рейтинг по формуле.
Т.е. примерно так
1 => 15
2 => 98
3 => 87
4 => 55
5 => 1
6 => 18
и т.д. по количеству товаров в таблице
Теперь самое сложное (для меня):
Как определить рейтинг от 1 до 5 для каждого товара.
Подумал, может можно сделать следующим образом:
1. Сортирую массив с сохранением ключей по убыванию: arsort
2. Далее считаю сколько всего элементов в массиве: count
3. Считаю сколько элементов в массиве может быть с определенным рейтингом (получаю $n). Т.е. если рейтингов всего 5, то я делю количество элементов массива на 5 и округляю (ceil) результат в большую сторону.
4. И вот далее я застопорился. Т.е. мне надо первым n элементам присвоить рейтинг пять, следующим n элементам присвоить четыре, следующим 3, следующим 2, а остальным 1.
5. Уже после этого разнести результаты по базе, поставив соответствующему ID товара соответствующий рейтинг.
Вот не знаю как пункт 4 реализовать. Толи городить циклы с использованием next то ли еще как-то.
Соответственно вопросы:
- Стоит ли городить такую кашу или есть более простой способ.
- Если способа нет, то как лучше реализовать пункт 4.
Заранее благодарю. Извините если очень много текста получилось.
