2013-05-21 4 views
0

У меня есть две таблицы: пользователи и интересы.Получать записи, которые разделяют другие данные в связанной таблице?

интересы состоят из интереса (например, «футбол») и идентификатора пользователя.

Я хотел бы запросить пользователя и получить всех других пользователей, которые имеют не менее 3 интересов, но я не знаю, как это сделать эффективно.

Как написать SQL для «получения интересов пользователя и получения всех других пользователей, которые имеют по меньшей мере три из этих интересов»?

Спасибо.

+0

Как бы вы это сделали неэффективно? ;) – fancyPants

ответ

1
SELECT i.interest, i.user_id, COUNT(*) AS amount 
# , u.username 
FROM interests AS i 
LEFT JOIN interests AS i2 
ON i.interest LIKE i2.interest 
# LEFT JOIN users AS u 
# ON i2.user_id = u.id 
WHERE i.user_id = 1 
GROUP BY i.interest 
HAVING amount >= 3 

Это бы предполагаю, что у вас есть users (id, username) и `интересы (проценты, user_id) '. Раскомментировать включение имени пользователя.

Рассмотрите также интересы как идентификационные ссылки вместо VARCHAR. Логичнее поддерживать.

Смежные вопросы