Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Помогите разобрать sql-запрос

254
12 апреля 2009 года
Cker
341 / / 20.08.2000
У меня есть таблица с новостями. У каждой новости есть текст и набор ключевых слов.
Мне нужно при выводе новости по заданным для нее ключевым словам отобрать все похожие новости.
Вот подсказали запрос:
SELECT pid, COUNT(есть_слово) кол_во_слов FROM
(
SELECT pid, 1 FROM Статьи WHERE текст_статьи LIKE '%' + ключевое_слово_1 + '%'
UNION
SELECT pid, 1 FROM Статьи WHERE текст_статьи LIKE '%' + ключевое_слово_2 + '%'
UNION
SELECT pid, 1 FROM Статьи WHERE текст_статьи LIKE '%' + ключевое_слово_3 + '%'
UNION
SELECT pid, 1 FROM Статьи WHERE текст_статьи LIKE '%' + ключевое_слово_4 + '%'
) abc
GROUP BY pid
ORDER BY кол_во_слов DESC

Но что здесь count(есть_слово)? Что такое есть_слово?
Может кто-то подсказать? Или есть другой алгоритм?
46K
12 апреля 2009 года
flame_max
23 / / 09.04.2009
Цитата: Cker
У меня есть таблица с новостями. У каждой новости есть текст и набор ключевых слов.
Мне нужно при выводе новости по заданным для нее ключевым словам отобрать все похожие новости.
Вот подсказали запрос:
SELECT pid, COUNT(есть_слово) кол_во_слов FROM
(
SELECT pid, 1 FROM Статьи WHERE текст_статьи LIKE '%' + ключевое_слово_1 + '%'
UNION
SELECT pid, 1 FROM Статьи WHERE текст_статьи LIKE '%' + ключевое_слово_2 + '%'
UNION
SELECT pid, 1 FROM Статьи WHERE текст_статьи LIKE '%' + ключевое_слово_3 + '%'
UNION
SELECT pid, 1 FROM Статьи WHERE текст_статьи LIKE '%' + ключевое_слово_4 + '%'
) abc
GROUP BY pid
ORDER BY кол_во_слов DESC

Но что здесь count(есть_слово)? Что такое есть_слово?
Может кто-то подсказать? Или есть другой алгоритм?


SELECT pid, [COLOR="Red"]1 AS есть_слово [/COLOR]
FROM Статьи
WHERE текст_статьи LIKE '%' + ключевое_слово_1 + '%'

Ваш запрос вернет список статей с указанием количества похожих ключевых слов в них, отсортированный в обратном порядке по количеству слов
в виде
ids кл-во_слов
1 5
2 3
...
Вам останется только выбрать, например первые 3 или 10 записей и вывести их.

254
12 апреля 2009 года
Cker
341 / / 20.08.2000
Спасибо большое. Понял идею. Начал делать, получился вот такой запрос:

SELECT sid, COUNT( ex ) count
FROM (
SELECT sid, 1 AS ex
FROM kolumb_stories2
WHERE kews LIKE '%Избыточный%'
UNION SELECT sid, 1 AS ex
FROM kolumb_stories2
WHERE kews LIKE '%вес%'
UNION SELECT sid, 1 AS ex
FROM kolumb_stories2
WHERE kews LIKE '%укорачивает%'
UNION SELECT sid, 1 AS ex
FROM kolumb_stories2
WHERE kews LIKE '%жизнь%'
)abc
GROUP BY sid
ORDER BY count DESC

При выполнении этого запроса результат получаю:
37 1
38 1
40 1

Хотя для записи 37 kews равно "Избыточный вес" и по идее должно быть 2

Что у меня не правильно?
304
12 апреля 2009 года
Fenyx
707 / / 26.01.2005
Я надеюсь что такие запросы используються в локальной версии базы и никак не связанны с рабочим веб приложением или разработкой такового )
254
12 апреля 2009 года
Cker
341 / / 20.08.2000
Совсем все плохо?
304
13 апреля 2009 года
Fenyx
707 / / 26.01.2005
Цитата: Cker
Совсем все плохо?


Ну если у тебя не выделенный сервер, а обычный хостинг то готовся к разговорам с тех поддержкой за превышение квоты использования ЦП и оперативы ) Ну а если выделенный то готовся к чтению логов и отловке самых тормозных запросов. Если таких запросов не избежать предусматривай кеширование, ну а если приложение только разрабатываеться то советую полностью пересмотреть структуру БД и приложения в целом, исключить такие медленные запросы. Работа со строками в БД одно из самых тормозных мест в приложении

ЗЫ запрос просто ШИКАРЕН - в нем присутствуют почти все самые тормозные реализации SQL - такие как COUNT() (раз), LIKE да еще и по полнотекстовому поиску (два), GROUP BY (три), ORDER по count (четыре) и отсутсвие каких бы то ни было лимитов (хотя они и не спасут при выборке прогоняющей всю таблицу) а еще унион )

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог