Как сделать поочередный вывод данных из базы sqlite?
Не понимаю, как выводить данные (любые) по очереди из базы данных.
Я делаю бота локального с анкетами людей, и по нажатии кнопки в боте тг - он должен залезть в базу, взять строку с данными и отправить пользователю (с отправкой данных проблем нет) и когда человек повторно нажмёт кнопку, то бот соответственно возьмёт следующую строку с данными и отправит юзеру забыв про первую строку, а когда дойдёт до конца всех записей - уведомит, что анкеты кончились и предложит посмотреть повторно.
Мой бот сейчас выводит все данные в принципе в рандомном порядке и повторяется, А МНЕ НАДО, чтобы бот не повторял анкеты раз за разом и была последовательность, либо, чтобы бот отправлял данные в рандомном порядке, но главное, чтобы не отсылал те данные, которые уже отсылал недавно.
2 варианта:
1. в базе для каждого пользователя хранить идентификатор последней просмотренной анкеты и при запросе следующей, находить ее и обновлять сохраненное значение, тогда возможно будет с разных клиентов продолжать просмотр с сохраненного места
2. хранить в клиенте идентификатор последней просмотренной анкеты, и при запросе следующей передавать этот идентификатор, от которой и осуществлять поиск следующей
Как я понимаю пользователи и их анкеты лежат в одной таблице?
Ну в целом надо исходить из ТЗ, например могут ли пользователи иметь больше 1 анкеты, нужна ли возможность например помечать просматриваемые анкеты(типа отложить или избранное), и т.д. и т.п.
Если все по минимуму и анкета лежит в таблице пользователя, или же раздельно, но имеет его же айдишник, то в принципе можно его и использовать. Однако стоит наверно сразу подумать о том, как система будет развиваться и что потребуется в дальнейшем, чтобы потом не переделывать по 10 раз.
С точки зрения правильности проектирования, обычно не смешивают разные сущности, потому что по сути экономия есть только на отсутствии связывающих таблицы полей, но будут проблемы при расширении или изменении функционала.
Я бы предложил что-нить типа:
1. юзеры (ид, имя, логин, хеш пароля, контакты и прочее, в общем профиль)
2. анкеты (ид, ид_юзера, данные анкеты)
3. просмотр анкет (ид, ид_юзера, ид_анкеты, тип просмотра (последний просмотр, отложенная, ...), дата просмотра)
Плюс в каждой таблице иметь набор полей типа даты создания, даты последнего изменения, признак удаления и т.д.
Fallenyasha, мой бот состоит из нескольких кнопок в которые входят - «создать анкету», «посмотреть анкеты»
При нажатии на первую кнопку - бот опрашивает юзера, он спрашивает его имя, сколько ему лет, где живет, просит скинуть фотку (по желанию), просит описание и Контакты, все его данные вносятся в одну базу, в одну таблицу users, где есть userid, name, city, old, photo, desc, cont
По сути регистрация анкеты почти завершена.
Далее бот скидывает юзеру его же анкету и спрашивает все ли ок, если да, то мы переходим в меню, если нет, бот удаляет анкету.
При нажатии на кнопку «посмотреть анкеты» бот запрашивает город, в котором ищем (если нет анкеты) и в функции происходит поиск данных в базе по городу и в рандомном порядке выводятся данные сгруппированные.
Никакие данные к анкетам не присваиваются, я не присваиваю айди к анкетам и не помечаю их как-то, это просто данные юзеров и все. В дальнейшем я не буду делать что-то сложное типа лайкнуть анкету, в избранное и все. Это будет служить доской объявлений. Мне просто нужно по городу выводить данные в очередном порядке и уведомлять, когда итератор дойдёт до конца. В sqlite3 есть rowid, может быть его как-то можно использовать? В общем я не знаю, я запутался и уже несколько часов сижу над казалось бы простой проблемой
Ну первое что приходит в голову это иметь следующие поля: city и last_user
Теперь по сценариям:
1. у пользователя нет ничего заполненного и он осуществляет поиск указав город, сохраняем ему город (city), находим анкету с минимальным номером (rowid) и подходящим городом, сохраняем ему этот номер (last_user) и выводим данные юзеру
2. у пользователя уже был ранее заполнен город (city) и номер последней просмотренной анкеты (last_user), тогда мы находим анкету с минимальным номером (rowid) и подходящим городом, но чтобы номер анкеты был больше чем last_user, и дальше аналогично, сохраняем, возвращаем
3. в случае если в шаге 2 анкету не нашли, , т.е. мы дошли до конца списка, то предлагаем начать с начала
Fallenyasha, не совсем знакомства, но что-то типа этого, только проще. Можно ваш телеграм, я все конкретно опишу и покажу на примере. До сих пор не могу добиться результата