Edgars Kupčs Ответов: 1

Sql игра questline для многих пользователей.


Всем привет, я долго думал и не могу понять, как сделать отношения и таблицы в SQL, чтобы сделать что-то подобное:

у меня есть один столик пользователи:
он включает в себя имя пользователя, пароль, user_id;

вторая таблица квесты
он включает в себя quest_id, quest_nr, описание квеста


и мне нужно, чтобы зарегистрированный пользователь видел весь список квестов и за флажком, где он может проверить, сделал ли он это, и если другой пользователь войдет в систему, он увидит тот же список квестов, но проверил в столбце done quest только проверки HES...

Как отобразить одну таблицу со всеми столбцами, чтобы каждый пользователь, вошедший в систему, видел только проверки последнего столбца ? Пожалуйста, помогите мне, я новичок в этой ситуации

Я знаю, как сделать это для одного человека, там нужно одну таблицу квестов и последней колонке, что там, где пользователь может проверить, но как сделать одну таблицу, в которой отображаются только логин пользователя и проверяет все квесты таблицы, чтобы не делать таблицу для каждого пользователя, но использовать одну таблицу для всех, я не понимаю как сделать эту таблицу SQL и отношения выберите и структуру таблицы, mybe кто-то поймет меня и мой длинный текст мысль, что я имею в виду?

Что я уже пробовал:

Я использую PostgreSQL, созданную таблицу пользователей и таблицу квестов

Richard Deeming

NB: Я надеюсь, что ваш password колонка есть нет хранение пароля пользователя либо в виде обычного текста, либо с использованием обратимого шифрования!

Безопасная Аутентификация Паролем Объясняется Просто[^]
Соленое хэширование паролей - делаем это правильно[^]

1 Ответов

Рейтинг:
2

raddevus

Вам нужно соединить эти две таблицы.
Вот очень хорошее объяснение: PostgreSQL - JOINS - Tutorialspoint[^]

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

Например, у вас будет столбец в пользовательской таблице с именем quest_id.

Тогда вы можете :

select * user join quest on user.quest_id = quest.quest_id


Кроме того, обычно вы называете свои идентификаторы просто ID в целевой таблице.
К примеру в вашей таблице пользователей есть столбец ID (не функция user_id) и ваши поиски таблице будет столбец ID (не quest_id).
Тогда ваше присоединение может выглядеть так:

select * from user join quest on user.quest_id = quest.id

Это даст все столбцы

Если вам нужен только один столбец, вы выполняете тот же запрос, но перечисляете только тот столбец, который вам нужен.
select username, [description of quest] from user join quest on user.quest_id = quest.id


Edgars Kupčs

Thank You very much for help and good explain, but Your solution is for one row and one quest to be recorded. I need to display all quests 1-100.. and select quest_number, description, boolean check, all together 3 columns and all many 1-100 row of quests... after player log in into website he see all quests from table quests number, description, and checkbox and if he done one of those he can check put as true... but problem is when other player log in into website how to display all same table with many rows but in column with checkbox see only that players quests what he done... i want use same table of quests but each player see his checked list in that table... easy way is to make duplicates of each quests table but its not good idea because players can bee many and why duplicate table, when can use these description table for all but checkbox column each have own... i hope i good explain idea mate.

raddevus

Я думаю, вы говорите, что у вас есть отношение 1 ко многим от пользователя к квесту.
1 пользователь может иметь от 1 до многих квестов.
В этом случае можно создать простую таблицу, содержащую только два столбца:
Ид_пользователя, Quest_id

Затем вы просто помещаете туда свои данные и используете их для последующего объединения.
Ид_пользователя, Quest_id
1 , 1
1 , 3
1 , 4
1 , 5
2, 3
3, 1
3, 2

Видите ли, у некоторых пользователей есть много квестов(userid 1), а у других (userid 2) только 1.

Edgars Kupčs

Я пробовал это, но не понимаю, как отобразить все столбцы квестов не олны, которые сделаны, но все сделано и не сделано, здесь у меня есть проблема, что когда я использовал join, я знаю, как отобразить те квесты, которые игрок сделал, но мне нужен весь список с квестами и колонкой, как на фото, где каждый игрок может проверить, сделал ли он один из них, а затем другой игрок видит только в чеках hes checked и unchecked список всех квестов