Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Базы Данных > Поиск аналогов товара


Автор: batek 22.2.2006, 13:45
Задача которую я немогу осуществить:На некотором сайте имеются некоторые товары под каждым из которых располагается кнопочка найти аналоги при нажатии на которую модуль должен вывести от 1 до 5 аналогов или сказать что аналогов нет. База данных к которой конектится модуль состоит из следующих полей id(ид номер товара),
marka(название), group1(группа),param1,..,param32(параметры от 1 до 32),cost(цена). Если кто знает как сделать напишите пожалуйста.

Автор: -=Ustas=- 22.2.2006, 14:19
Ты должен знать, что содержится в остальных полях. По полям, которые ты дал, нельзя определить аналоги.

Автор: batek 22.2.2006, 15:19
-=Ustas=- надо проверять по параметрам выделить или как то пометить какой параметр нужно проверять первым, какой вторым и так далее если в результате вывелось >5 аналогов то уже проверять по цене в пределах от (cost-n) до (cost+n)

Автор: CTAPbIuMABP 22.2.2006, 15:59
Код

SELECT id FROM `table` WHERE `cost`BETWEEN (`cost`-$delta AND `cost`+$delta) ORDER BY parametr1 ASC, parametr2 DESC, parametr3, ... parametr32 LIMIT 5

Автор: batek 22.2.2006, 20:01
CTAPbIuMABP не не так он тут тока по цене смотрит

Автор: IZ@TOP 22.2.2006, 20:44
Предлагаю несколько переделать вариант CTAPbIuMABP, но идея думаю ясна. Это самое простое решение.
Только диапазон нужно брать конкретно 2 менее текущего ID и два более текущего ID.
Единственное, так всегда будет что-то выводиться. Поэтому можно сделать еще сравнение по полям в самом РНР. К примеру, если больше 50% полей совпадают данными с тем, что имеется у товара, тогда выводим, если менее 50% совпадений, не выводим.

Автор: -=Ustas=- 22.2.2006, 21:16
Цитата(IZ@TOP @ 22.2.2006, 20:44 Найти цитируемый пост)
Только диапазон нужно брать конкретно 2 менее текущего ID и два более текущего ID.

Это уже будет совсем не аналогичность товаров. Скорее всего, насколько я могу предполагать, скорее всего у товара есть поля с его описанием, предназначение и т.д., т.е. полная информация о товаре. Вот в эту сторону и надо копать, даже точнее в сторону полнотекстового поиска по информации из текущего товара.
В полнотекстовом поиске есть такая фишка, как извлекать величины релевантности в явном виде по совпадениям (плюс, еще придется использовать логический режим), вот тут-то и надо выдирать релевантность и решать, анологичен ли товар или нет.
Т.е. одним словом, нужно определять и сверять по полям с полной информацией о товаре.

Автор: batek 22.2.2006, 22:05
Параметры такие:

Производитель: LG Корея (param1)
Гарантия: 36 месяцев (param2)
Стандарт: GSM 900/1800 (param3)
Размер: 105х44х16 мм (.....)
Вес: 73 грамм
Батарея: Li-Ion 780 мАч
Время работы в режиме ожидания: до 200 час.
Время работы в режиме разговора: до 3 час.
Дисплей: Цветной. 65000 цветов (cSTN). 128 x 128 точек
Встроенная фотокамера: Есть. Разрешение до 640х480
Записная книжка: Расширенная. 200 имен. До 4 номеров и адрес электронной почты на имя. Группы
Русский ввод (в зап.книжку и SMS): Есть
Голосовой набор: Нет
Диктофон: Есть
FM приемник: Нет
ИК-порт: Нет
Bluetooth: Нет
WAP: WAP 2.0
MMS: Есть
GPRS: Есть
HSCSD: Нет
Модем: Есть
Е-мail клиент: Нет
Органайзер: Есть
Поддержка Java: Есть
Игры: Есть
Вибро - звонок: Есть
Звонок: Полифонический, 40-тональный. + загружаемые (param28)
все эти параметры VARCHAR
Добавлено @ 22:11
-=Ustas=-Что за полнотекстовый поиск и какими функциями он осуществляется

Автор: CTAPbIuMABP 23.2.2006, 11:11
$result = масив значений этого товара

Код

SELECT id FROM `table` WHERE `cost`BETWEEN (`cost`-$delta AND `cost`+$delta) AND ( parametr1 = '{$result['parametr1']}' AND ( parametr2 '{$result['parametr2']}' AND ( parametr3 = '{$result['parametr3']}', ... AND (parametr32='{$result['parametr1']}'))[32скобки])) LIMIT 5


бред получается

может есть функция которая сравнивает строки на похожесть? хотя тоже бред((( придется ВСЮ таьлицу по ВСЕМ полям ровнять....

Ты б выбрал допустим 3-4 значения Стандар, Дисплей, Производитель, Модем например и выбирал

Автор: batek 23.2.2006, 12:20
А если сделать форму гда галочками выбираешь нужные параметры для поиска, то как сделать чтобы они подставлялись в запрос
Добавлено @ 12:25
а вообще лучше всего сделать так как на сайтеhttp://www.techhome.ru/catalog/byt/AA500B13_00000000_5.htm
при нажатии на кнопку похожие товары

Автор: CTAPbIuMABP 23.2.2006, 12:50
IMHO тебе лучше прилепить еще одно 33-е поле к котором через запятую указать товары которые на него похожы по твоему мнению и потом выбирать только из этого поля

Код

WHERE paramtr33 LIKE '.{$result['id']}.'


это ОЧЕНЬ ускорить выборку

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)