Хотите отобразить результаты, основанные на «релевантности» поиска пользователей вместе с наиболее продаваемой ценой продавца. Живой пример того, к чему я стремлюсь, - это результаты поиска Amazons, теперь я понимаю, что их алгоритм чрезвычайно сложен, но мне нужна упрощенная версия.
Допустим, мы ищем 'Jumper', результаты которого возвращаются товары, связанные с «перемычкой», но тогда цена не всегда самая дешевая на основе рейтинга продавца. Продавец с наивысшим рейтингом отображает свои цены.
Вот то, над чем я работал, но не дал мне ожидаемых результатов в упомянутом выше, и, честно говоря, я не думаю, что это очень эффективно .
SELECT a.catalogue_id, a.productTitle, a.prod_rank, b.catalogue_id, b.display_price, b.sellers_rank
FROM
(
SELECT c.catalogue_id,
c.productTitle,
MATCH(c.productTitle) AGAINST ('+jumper*' IN BOOLEAN MODE) AS prod_rank
FROM catalogue AS c
WHERE c.catalogue_id IN (1, 2, 3)
) a
JOIN
(
SELECT inventory.catalogue_id,
inventory.amount AS display_price,
(accounts.comsn + inventory.quantity - inventory.amount) AS sellers_rank
FROM inventory
JOIN accounts ON inventory.account_id = accounts.account_id
WHERE inventory.catalogue_id IN (1, 2, 3)
) AS b
ON a.catalogue_id = b.catalogue_id
ORDER BY a.prod_rank DESC
LIMIT 100;
Образцы таблиц:
Accounts:
----------------------------
account_id | comsn
----------------------------
1 | 100
2 | 9999
Catalogue:
----------------------------
catalogue_id | productTitle
----------------------------
1 | blue jumper
2 | red jumper
3 | green jumper
Inventory:
-----------------------------------------------
product_id | catalogue_id | account_id | quantity | amount |
-----------------------------------------------
1 | 2 | 1 | 6 | 699
2 | 2 | 2 | 2 | 2999
Ожидаемые результаты:
Product Title:
red jumper
Amount:
29.99 (because he/she has sellers rank of: 7002)