SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 08.11.2012 14:12:53

maxtor
Участник
Зарегистрирован: 21.07.2010
Сообщений: 20

Сортировка по числу совпавших тегов

Подскажите, как реализовать такую задачу:
Имеются статьи, у статей есть теги. Хочу для каждой статьи выводить список похожих статей на основании совпадений в тегах. Причем сортировать нужно по числу таких совпадений. Т.е. чем больше общих тегов, тем статья должна быть выше.

Неактивен

 

#2 08.11.2012 15:19:41

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Сортировка по числу совпавших тегов

Если теги в отдельной таблице (article_id, tag_id), то
select article_id from `таблица связей` group by 1 order by count(*) desc;

select ... from `таблица статей` order by field(id, список article_id из прошлого запроса);  -- например, field(id, 5,12,8,3);

Неактивен

 

#3 08.11.2012 17:30:42

maxtor
Участник
Зарегистрирован: 21.07.2010
Сообщений: 20

Re: Сортировка по числу совпавших тегов

vasya, спасибо огромное, то что нужно!

Неактивен

 

#4 08.11.2012 19:18:17

maxtor
Участник
Зарегистрирован: 21.07.2010
Сообщений: 20

Re: Сортировка по числу совпавших тегов

Столкнулся с такой проблемкой. Хотел еще выводить статьи с совпадением по имени. Использую fulltext индекс для сортировки:
WHERE
    `articles`.`id` IN (".implode(', ', $articles_id).")
    OR MATCH(`articles`.`name`) AGAINST('имя исходной статьи') >= 1
ORDER BY
    FIELD(`articles`.`id`, ".implode(', ', $articles_id)."),
    MATCH(`articles`.`name`) AGAINST('имя исходной статьи') DESC

хочу в итоге получить:
сначала совпадения по тегам, потом совпадение по имени.
Но результат почему-то вперемешку, почему так?

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson