Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Выборка нескольких самых релевантных записей по тэгам
 
 автор: m@rchello   (14.03.2013 в 13:12)   письмо автору
 
 

Добрый день.
Имеется задача при просмотре какого то товара вывести несколько ПОХОЖИХ товаров.
Похожесть определяется по кол-ву одинаковых тэгов.
тоесть имеется две таблицы (схематично и сокращённо)

первая - Товары

 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?

  Ответить  
 
 автор: Sfinks   (14.03.2013 в 16:31)   письмо автору
 
   для: 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

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования