Как выбрать всех продавцов одного товара (как на яндекс маркет или пром.юа)?
Как происходит поиск всех продавцов одного товара при открытии карточки товара?
Нужно вывести всех продавцов у которых есть этот товара с сортировкой по цене например. А именно как это происходит на стороне сервера? Кто знает?
Что мне приходит в голову:
Осуществляется поиск "like" "title" ? или поиск точного совпадения WHERE TITLE = 'Снегоуборщик Forte КСМ-62E'? налету, и вывести всех продавцов с ценой товара.
Но если в базе много товаров в категории, то такой поиск налету будет слишком дорогой.
Например, ищем Снегоуборщик Forte КСМ-62E
На прайс аггрегаторах, список продавцов у которых есть этот товар, если перейти на сайтпродавца, то у каждой компании свое название этой косилки, Forte КСМ 62E, Forte КСМ.62E, Forte КСМ 62 и так далее.,
Как оно должно называется у прайсаггрегатора в базе, чтобы поиск был не слишком ресурсоёмкий и точный, и поиск идёт LIKE "на лету" ? Или ещё как то?
Или при добавлении товара сразу искать всех продавцов и записывать его в цепочку связей? а уже при выборе всех продавцов у которых есть этот товар выбирать
Не понятно что именно требуется, реализация поиска или просто вывод при открытии карточки товара, например?
Если 2ое, тогда должно быть 3 таблицы:
- информация о товаре
- информация о продавцах
- связующая таблица
Связь между товарами и продавцами будет много ко многим (у одного продавца может быть несколько товаров, у одного товара может быть несколько продавцов).
В таблицах товаров и продавцов будет уникальный идентификатор (ид) , в связующец таблице записи вида ид_товара / ид_продавца.
Вывод осуществляется на основании ид товара: WHERE id = 1
Сергей Герасимов, все верно, второе, вывод при открытии карточки товара, продавцов у которых есть точно такой же товар. Связь только много к одному в данном случае. У одного товара может быть много продавцов. Вопрос в том как их связать. Всё равно нужно как то найти их в базе по точному поиску?
Или всё же это нужно делать премодерацию оператору ?, если сделать поиск LIKE к снегоуборочным апаратам , в список может попасть газонокосилка.
masimka, по поводу связи - скорей всего у вас не может быть один ко многим... У продавцов бывают разные товары, как правило, следовательно в данном случае логичнее использовать именно связь много ко многим и добавлять связующую таблицу.
При втором варианте - вы же информацию о товаре как-то выводите пользователю - т.е. в карточке товара уже есть название/описание и т.п., а значит и есть какой-то идентификатор, по которому вы этот товар выводите (допустим это поле id из таблицы products) с использованием ссылки на карточку товара, например вида site.ru/products/1, где 1 - это id товара, либо site.ru/products/slug, где slug - это ЧПУ-ссылка на товар (например, forte-kcm-62e).
Следовательно зная идентификатор или slug с помощью связующей таблице (допустим это будет таблица customer_product) можно получить список всех продавцов этого товара. Должно получиться что-то подобное:
SELECT *
FROM products p
JOIN customer_product cp
ON p.id = cp.product_id
JOIN customers c
ON c.id = cp.customer_id
WHERE p.id = forte-kcm-62e
Или:
SELECT *
FROM products p
JOIN customer_product cp
ON p.id = cp.product_id
JOIN customers c
ON c.id = cp.customer_id
WHERE p.slug = forte-kcm-62e
Сергей Герасимов, WHERE p.slug = forte-kcm-62e
кстати, так было бы лучше всего., согласен., это вариант.
Сейчас идентификатор товара для ЧПУ есть транслитерализированный title товара, если в базе такой уже есть то к нему просто рандомно добавляется цифры.
Надо было к товару в чпу добавть 238472-forte-kcm-62e тогда выбирается только по id, а остальное может быть похожим.
Примерно понял, чтото придумаю. Спасибо
Вариант 1 (алибаба). Никак не привязывать. Что посетитель укажет в поиске - то и показать.
Вариант 2 (ЯндексМаркет). Иметь свою БД всех товаров с качественными описаниями. Каждый товар продавца привязывать к своему товару ("неточный поиск", "AI", ручная привязка армией специально обученных человек и пр.). И лишь после привязки показывать на сайте в подразделе "где купить этот товар"