Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Проектирование БД Новый топик    Ответить
 Как средствами одного только SQL решить задачу пересечения множеств?  [new]
Роми Коэн
Member

Откуда:
Сообщений: 4
Подскажите пожалуйста, можно ли средствами одного только SQL (MySQL или любой другой опенсорсовый) решить задачу пересечения множеств подобного рода:

- У пользователя веб-приложения есть профайл, в котором есть поле, куда он может ввести произвольные теги через запятую,

- Есть конопка, при нажатии на которую, пользователь получает список других пользователей, отранжированный по числу точных совпадений в этом списке (например, у него список [вишня, банан, яблоко, курица, весло], а у кого-то [танк, газета, яблоко, весло, шило] - 2 совпадения - яблоко и шило).

1. В каком формате лучше хранить это в базе? Как именно?

2. Как потом одним запросом получить этот ранжированный список?

3. В общем, как это сделать лучше и правильнее всего?

Знающие люди предложили решить средствами NoSQL (Redis) но может как-то можно сделать обычными средствами?

Спасибо.
2 сен 19, 16:04    [21962001]     Ответить | Цитировать Сообщить модератору
 Re: Как средствами одного только SQL решить задачу пересечения множеств?  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 48131

Роми Коэн
1. В каком формате лучше хранить это в базе? Как именно?

2. Как потом одним запросом получить этот ранжированный список?

3. В общем, как это сделать лучше и правильнее всего?

EAV. Потом простенький запрос с JOIN + GROUP BY + ORDER BY COUNT(*) DESC.

Posted via ActualForum NNTP Server 1.5

2 сен 19, 16:18    [21962017]     Ответить | Цитировать Сообщить модератору
 Re: Как средствами одного только SQL решить задачу пересечения множеств?  [new]
Роми Коэн
Member

Откуда:
Сообщений: 4
Dimitry Sibiryakov,
я правильно понял, что таблица tags будет выглядеть примерно так:


user_id tag
1 apple
1 dog
1 tree
2 dog
2 tree
2 sun
3 tree
3 sea
3 moon

да?

а как будет выглядеть запрос к такой таблице для юзера с id 1?

например таблица users (просто для общей картины)

id name
1 John
2 Mike
3 Vasia
3 сен 19, 07:14    [21962203]     Ответить | Цитировать Сообщить модератору
 Re: Как средствами одного только SQL решить задачу пересечения множеств?  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 48131

Роми Коэн
а как будет выглядеть запрос к такой таблице для юзера с id 1?

Именно так как я сказал:
select a.user_id as user1, b.user_id as user2, count(*)
from tags a join tags b on a.tag=b.tag
group by 1,2
order by 3 desc

Posted via ActualForum NNTP Server 1.5

3 сен 19, 12:21    [21962383]     Ответить | Цитировать Сообщить модератору
Все форумы / Проектирование БД Ответить