Задавайте вопросы, мы ответим
Вы не зашли.
Страниц: 1
Столкнулся с серьёзной проблемой в разработке веб-сайта знакомств для курсовой. Создал всю внешнюю оболочку, обмен сообщениями и т.д., но остался сложный подбор людей по интересам.
Мне нужно, чтобы у пользователей хранились их процентные совпадения по интересам с другими пользователями, чтобы потом я мог находить им друзей. Но сейчас мне нужно конкретно находить процент совпадений.
Ниже прикладываю схему, логику действий, которую я не могу реализовать, и MySQL код таблиц.
Я уже посмотрел все схожие темы но не нашёл ничего столь запутанного, как моё задание. Прошу вашей помощи!
Этот "цикл" будет отдельно для каждого Id_music, id_book и id_film, потому в описании они идут через /
1)При добавлении поля Id_music/id_book/id_film в таблицу users создавать цикл, = количеству пользователей - 1. ID нашего пользователя заносится каждый раз на позицию user_one в таблицу Stats, а id того, с кем сравниваем - в user_two.
2)Считать количество записей по id в таблице Listened/Watched/Read, чтобы узнать общее количество интересов в этой категории у нашего пользователя. Тоже самое делаем для пользователя в цикле
3)Поочередно сравнивать поле ID_Music/ID_Book/ID_Film в таблице Read/Listened/Watched нашего пользователя на совпадение с теми же полями у другого пользователя, что сейчас в цикле. В итоге мы получим число совпадений.
4)Сравниваем это число с количеством записей этих пользователей из пункта 2. К примеру, если у нашего пользователя всего 4 записи , а у второго 8, и совпадений 2, мы заносим в таблицу stats 50(%) в поле bks_prcnt/msc_prcnt/flm_prcnt и 25(%) в поле bks_prcnt_rev/msc_prcnt_rev/flm_prcnt_rev, потому что у второго пользователя больше интересов.
5)?цикл заканчивается. Если поля существовали ранее - обновляем, а не создаём их.
Отредактированно DoctorWholock (20.11.2016 20:36:13)
Неактивен
DoctorWholock написал:
1)При добавлении поля Id_music/id_book/id_film в таблицу users
в таблице users нет таких полей, возможно вы имели в виду Listened/Watched/Read ?
зачем в Listened/Watched/Read поле id ?
имеет ли смысл пересчитывать совпадение интересов после каждой записи в Listened/Watched/Read, а не по расписанию ?
если после каждой записи, то, возможно, имеет смысл вести пересчет только для тех пользователей, которые читали те же книжки, что и текущий пользователь. Зачем пересчитывать тех с кем заведомо нет общих интересов?
Непонятно, что именно вам не понятно.
Неактивен
vasya написал:
DoctorWholock написал:
1)При добавлении поля Id_music/id_book/id_film в таблицу users
в таблице users нет таких полей, возможно вы имели в виду Listened/Watched/Read ?
Да, просто переделывал несколько раз за последние сутки, уже путаюсь.
vasya написал:
зачем в Listened/Watched/Read поле id ?
Я думал использовать его чтобы посчитать количество интересов в книгах/фильмах/музыке каждого пользователя. Вроде Count id Where id_user=my_id
vasya написал:
имеет ли смысл пересчитывать совпадение интересов после каждой записи в Listened/Watched/Read, а не по расписанию ?
Можно было бы по расписанию, но это уже потом можно добавить, главное что запрос этот будет происходить при каком-то катализаторе, будь то время или добавление/удаление записи.
vasya написал:
если после каждой записи, то, возможно, имеет смысл вести пересчет только для тех пользователей, которые читали те же книжки, что и текущий пользователь. Зачем пересчитывать тех с кем заведомо нет общих интересов?
Может оно не продуктивно, но ваш вариант вроде подразумевает дополнительную проверку для моего цикла, а мне хотя бы с основой разобраться
vasya написал:
Непонятно, что именно вам не понятно.
Как написать данный цикл. Моих знаний хватило лишь на то чтобы создать сайт, который заносит и вытягивает информацию из базы, но такие сравнения слишком сложные для меня.
Знаю, что мне следовало уделить этой задаче больше времени, но я не видел её полностью до последних дней.
Неактивен
DoctorWholock написал:
Я думал использовать его чтобы посчитать количество интересов в книгах/фильмах/музыке каждого пользователя. Вроде Count id Where id_user=my_id
count(*) where id_user=my_id
DoctorWholock написал:
Может оно не продуктивно, но ваш вариант вроде подразумевает дополнительную проверку для моего цикла, а мне хотя бы с основой разобраться
мой вариант подразумевает совсем другой цикл:
например, добавили запись в `Read` (Х,У):
ищем юзеров, которые читали книжку У
select id_user from `read` where id_user<>'X' and id_book='Y'
для каждого из этих пользователей ищем кол-во совпадений с пользователем Х
select count(*) from `read` where id_user = 'другой юзер' and id_book in (select id_book from `read` where id_user = 'X');
DoctorWholock написал:
Как написать данный цикл.
Это слишком общий вопрос.
В этих статьях есть примеры хранимых процедур с циклами и подробными комментариями:
http://webew.ru/articles/2080.webew
http://sqlinfo.ru/articles/info/22.html
Неактивен
Страниц: 1