Алгоритм соответствия пользователей - PullRequest
1 голос
/ 26 апреля 2020

Я пытаюсь создать алгоритм сопоставления для своего веб-сайта.

Объяснение :

Предполагается, что сопоставление будет выполнено путем заполнения некоторых ответов на вопросы и получения соответствует тому, кто ответил на соответствующие ответы. * Некоторые ответы могут быть более одного ответа. * Пользователь может совпасть с более чем 1 человеком, если он спросит.

Например: Musi c жанры, которые вам нравятся (до 3)? ответ: Рок, Металл Языки ты говоришь (до 3) ответ: Английский sh, Испанский sh Китайский Особенности, которые вам нравятся в людях (до 2)? ответ: Высокий, Тощий

Ответы получены из пула ответов (раскрывающийся список), пользователь не может написать то, что он хочет.

В приведенном выше примере хороших примеров совпадения для этого пользователя:

    1. genre - Rock | language - english | features - Tall
    2. genre - Rock,Metal | language - spanish | features - Skinny
    3. genre - Metal | language - chinese | features - Skinny,Tall

Принцип состоит в том, что из каждого вопроса должна совпадать хотя бы одна вещь.

Проблема :

Поэтому я борюсь с тем, как создать алгоритм, который сопоставляет пользователя с другими пользователями.

Я думал о том, чтобы поместить каждую запись (данные поиска) в таблицу в базе данных, а затем запросить отдельные списки для всех люди, которые соответствуют данным пользователя.

Так что в этом случае, чтобы получить все нужные мне списки, нужно 12 запросов, чтобы получить 12 списков:

    SELECT * from table WHERE genre="Rock" And language="English" And feature="Tall"
    SELECT * from table WHERE genre="Rock" And language="Spanish" And feature="Tall"
    SELECT * from table WHERE genre="Rock" And language="Chinese" And feature="Tall"
    SELECT * from table WHERE genre="Metal" And language="English" And feature="Tall"
    SELECT * from table WHERE genre="Metal" And language="Spanish" And feature="Tall"
    SELECT * from table WHERE genre="Metal" And language="Chinese" And feature="Tall"
    SELECT * from table WHERE genre="Rock" And language="English" And feature="Skinny"
    ..
    ..

Также я не хочу смешивать списки, потому что я могу захотеть соединить 3 человека, а не 2, и тогда я не хочу смешивать языки или другие лайки.

так что в коде это будет что-то как это:

    for(int i = 0; i < genres.length; i++) {
        for(int j = 0; j < languages.length; j++) {
            for(int k = 0; k < genres.length; k++) {
                list = SELECT * from table WHERE genre=genres[i] And language=languages[j] And feature=features[k]
            }
        }
    }

Такой подход кажется немного уродливым и o это потребует большого количества вложенных циклов, и в будущем, если я захочу добавить вопросы, это просто добавит все больше и больше вложенности в циклы.

Не говорить о вставке каждой записи будет проблематично c, так как каждый пользователь имеет массив для каждого вопроса, поэтому каждая строка в таблице должна содержать только один из элементов массива, что означает, что у каждого пользователя будет несколько строк в таблице базы данных.

Как мне подойти к этой проблеме / алгоритму?

Спасибо.

Редактировать :

Чтобы уточнить, потому что это не достаточно ясно,

Пользователь, который выбрал ответы «Высокий» и «Тощий», должен соответствовать 2 другим людям, которые отметили «Высокий» ИЛИ 2 другим людям, которые отметили «Толстый» ИЛИ 2 другим людям, которые отметили «Толстый» и «Высокий» (то же самое для других вопросов)

Так что в этом случае (только этот вопрос) мне нужно 3 списка, и 2 человека, которых я в конечном итоге получу, должны быть только из одного из этих списков.

Проблема в том, что я не не нужно делать так много запросов, чтобы получить много списков, особенно когда совпадения для пользователя в конечном итоге будут получены только из одного из этих списков.

...