SQLinfo.ru - Все о MySQL

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

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

Вы не зашли.

#1 18.02.2016 07:45:40

W2S
Участник
Зарегистрирован: 18.02.2016
Сообщений: 4

Подсчёт упоминаний слов в таблице взятых из другой таблицы

2й день ломаю голову и никак не могу решить задачу:

Есть таблица names в ней есть поля id, name,counts и есть таблица pages в ней есть поля id, text

pages - содержит различные статьи
names - перечень искомых слов

id в таблицах не связаны!

задача для каждого name из таблицы names подсчитать число статей из pages (грубо говоря что-то типа  where pages.text like '%'||names.name||'%' ) - число упоминаний для каждого слова из другой таблицы

names
id name
1  Вася
2  Роман
3  Виталий

pages
id  text
1  Семен курит трубку, а Вася бамбук.
2  Виталий был опытный спортсмен, и когда Виталий побил новый рекорд никто не удивился
3  Кот Вася вылокал всю сметану
4  Виталий уделяет время не только спорту, но и своему коту по кличке Вася.

Вывести подсчёт:
name  count
Вася  3
Роман 0
Виталий 2


В идеале требуется даже не выборка, а в колонку counts таблицы names проставить соответствующие количества упоминаний каждого из слов.  Хотя буду рад и Select'у, в Update уж как-нибудь и переделаю

Отредактированно W2S (18.02.2016 07:48:06)

Неактивен

 

#2 19.02.2016 05:50:57

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

Re: Подсчёт упоминаний слов в таблице взятых из другой таблицы

MariaDB [test]> select name, sum(x) count from
(SELECT name, if(locate(name,`text`),1,0) x FROM `names`, `pages`) t group by 1;
+---------+-------+
| name    | count |
+---------+-------+
| Вася    |     3 |
| Виталий |     2 |
| Роман   |     0 |
+---------+-------+


Но это медленно и неправильно (например, если name=Семен, text='Семена тыквы ...')

Неактивен

 

#3 19.02.2016 08:11:26

W2S
Участник
Зарегистрирован: 18.02.2016
Сообщений: 4

Re: Подсчёт упоминаний слов в таблице взятых из другой таблицы

СПАСИБО! На основе этого получился неплохой update)

Неактивен

 

Board footer

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