Форум → Программирование → PHP для идиотов → Как реализовать "похожие товары"?
Как реализовать "похожие товары"?
-
На странице конкретного товара мне нужно сделать блок "похожие товары". В админке можно выбрать способ:
1) отображаются 5 штук из категории близкие по цене +-10%
2) выбираются вручную
У меня вопросы по этим пунктам:
1) что если в нужном диапазоне цен не набралось 5 штук? делать следующий запрос и расширять диапазон? или мб искать уже не в конкретной категории а по всем товарам?
2) что если какой-то из уже выбранных товаров удалён? внешние ключи юзать не получится, т.к. таблицы MyIsam нужны для полнотекстового поиска -
27 мая 2012 г. 12:15, спустя 1 час 5 минут 58 секунд
Написал функцию для первого пункта, посмотрите, не полное ли это говно? Может подскажите как лучше сделать?private function getRelatedByPrice($iId, $iRange = 0.1)
{
$sQuery = "SELECT `price`,`category_id` FROM " . $this->sTable . " WHERE id = " . $iId;
try
{
$aProduct = $this->oDb->fetchRow($sQuery);
}
catch (Exception $e)
{
echo $e->getMessage();
}
while($iRange < 0.5)
{
$iDif = $aProduct['price'] * $iRange;
$iMin = $aProduct['price'] - $iDif;
$iMax = $aProduct['price'] + $iDif;
if(!$bWithoutCategory)
{
$sQuery = "SELECT * FROM " . $this->sTable . " WHERE `price` > " . $iMin . " AND `price` < " . $iMax . " AND `category_id` = " . $aProduct['category_id'] . " LIMIT 5";
}
else
{
$sQuery = "SELECT * FROM " . $this->sTable . " WHERE `price` > " . $iMin . " AND `price` < " . $iMax . " LIMIT 5";
}
try
{
$aData = $this->oDb->fetchAll($sQuery);
}
catch (Exception $e)
{
echo $e->getMessage();
}
if(count($aData) == 5)
{
return $aData;
}
else
{
if($iRange != 0.4)
{
$iRange += 0.1;
}
else
{
$bWithoutCategory = true;
$iRange = 0.1;
}
}
}
} -
27 мая 2012 г. 12:59, спустя 44 минуты 16 секунд
в маже не заморачивались. Админ сам забивает похожие товары руцями к каждому товаруСпустя 11 сек.такой вариант тебе не подойдет? -
27 мая 2012 г. 13:07, спустя 7 минут 27 секунд
Абырвалг, у меня стоит задача реализовать возможность выбирать вручную и как альтернатива (если вручную не выбрано) - выводить близкие по цене..вот -
27 мая 2012 г. 13:39, спустя 32 минуты 23 секунды
Дак если задача показывать только похожие товары, показывай только их, почему именно пять товаров то. Представь ситуацию: в магазине сплошной ширпотреб за 10-50 баксов и пара товаров в единственном экземпляре за $1000, в итоге у тебя в списке похожих товаров для дорогого товара будет показываться 1000-50-49-49-48 к примеру, но он же нифига не похожий.
С отсутствующим/удалённым товаром проблема не понятна: SELECT … WHERE … AND is_removed=FALSEWork, buy, consume, die -
27 мая 2012 г. 14:03, спустя 24 минуты 23 секунды
Nyaah, спасибо, всё правильноС отсутствующим/удалённым товаром проблема не понятна: SELECT … WHERE … AND is_removed=FALSE
я имел ввиду полное удаление товара из бд…получается он просто не будет отображаться.. -
27 мая 2012 г. 15:45, спустя 1 час 41 минуту 46 секунд
Дык, если его из бд удалили, то как ты его покажешь? =)
А вообще, я так понимаю, у тебя нарушение целостности данных на лицо. Такого не должно быть в принципе, если невозможно контролировать целостность данных на уровне базы (отсутствие внешних ключей), то необходимо контролировать тогда её из приложения, к примеру запрещать удаление товара, если есть запись о нём в таблице продаж, либо просто завести флаг удаления, и показывать пользователю только те товары, у которых этот флаг равен false.Work, buy, consume, die -
27 мая 2012 г. 19:12, спустя 3 часа 26 минут 42 секунды
Nyaah, спасибо за помощь, это как раз то, что мне нужно!
Пожалуйста, авторизуйтесь, чтобы написать комментарий!