|
|
|
| Добрый день.
Имеется задача при просмотре какого то товара вывести несколько ПОХОЖИХ товаров.
Похожесть определяется по кол-ву одинаковых тэгов.
тоесть имеется две таблицы (схематично и сокращённо)
первая - Товары
id | title
-------------
1 | товар 1
2 | товар 2
3 | товар 3
4 | товар 4
5 | товар5
и тд.
|
id - порядковый номер (автоинкремент)
title - название товара
вторая - Тэги для товаров
tid | tag
------------
1 | тэг 1
1 | тэг 2
1 | тэг 3
1 | тэг 4
1 | тэг 5
1 | тэг 6
2 | тэг 2
3 | тэг 3
3 | тэг 5
3 | тэг 1
4 | тэг 4
4 | тэг 3
5 | тэг 5
5 | тэг 1
5 | тэг 2
5 | тэг 3
5 | тэг 6
|
tid - порядковый номер (id) товара
tag - непосредственно тэг
Что нужно получить
Предположим что мы просматриваем страницу с товаром 1 (id =1)
тогда выборка "Похожих" товаров должна вернуть записи в таком порядке
1 - товар 5
2 - товар 3
3 - товар 4
4 - товар 2
Само собой что не весь список нужно будет выкатывать а например 3 самых "похожих"
Как делаются такого рода запросы? или это нужно строить только несколько запросов и с обработкой php? | |
|
|
|
|
|
|
|
для: m@rchello
(14.03.2013 в 13:12)
| | >или это нужно строить только несколько запросов и с обработкой php?
не нужно.
Примерно так:
SELECT t2.tid id
, (SELECT title FROM `товары`t WHERE t.id=t2.tid)title
, count(*)`count`
FROM `тэги`t1
JOIN `тэги`t2 ON t1.tid<>t2.tid AND t1.tag=t2.tag
WHERE t1.tid=1
GROUP BY t2.tid
ORDER BY 3 DESC
LIMIT 3
|
| |
|
|
|