1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie. Узнать больше.
  2. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

Помогите Добавляется игрок в БД, даже если он уже есть в таблице!

Тема в разделе "Разработка плагинов для новичков", создана пользователем AlbertV, 11 июл 2018.

Статус темы:
Закрыта.
  1. Автор темы
    AlbertV

    AlbertV Активный участник Пользователь

    Баллы:
    66
    Имя в Minecraft:
    Lingue
    Привет тому, кто читаем мою тему!

    Столкнулся с одной проблемкой... Хочу, чтобы игрока добавляло в бд Mysql, если он зашел первый раз.
    Добавляет, но он все равно добавляет игрока в бд, даже если он заходит на сервер не первый раз.

    Прошу помочь! upload_2018-7-11_13-31-15.png
     
  2. imDaniX

    imDaniX Активный участник Пользователь

    Баллы:
    96
    Имя в Minecraft:
    imDaniX
    Является ли в таблице столбец NAME ключом?
     
  3. Автор темы
    AlbertV

    AlbertV Активный участник Пользователь

    Баллы:
    66
    Имя в Minecraft:
    Lingue
    нет
     
  4. imDaniX

    imDaniX Активный участник Пользователь

    Баллы:
    96
    Имя в Minecraft:
    imDaniX
    Сделай его таковым х)
     
  5. Автор темы
    AlbertV

    AlbertV Активный участник Пользователь

    Баллы:
    66
    Имя в Minecraft:
    Lingue
    Ок, попробую
     
  6. Автор темы
    AlbertV

    AlbertV Активный участник Пользователь

    Баллы:
    66
    Имя в Minecraft:
    Lingue
    не помогло
     
  7. Автор темы
    AlbertV

    AlbertV Активный участник Пользователь

    Баллы:
    66
    Имя в Minecraft:
    Lingue
  8. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    И такое делается примерно так. "INSERT INTO users (user,time) VALUES (?,?) ON DUPLICATE KEY UPDATE time = ?;". колонка юзера должна быть единственным ключем.
     
  9. Reality_SC

    Reality_SC Старожил Пользователь

    Баллы:
    123
    Имя в Minecraft:
    Reality_SC
    Yep
     

    Вложения:

  10. Bars

    Bars Старожил Девелопер Пользователь

    Баллы:
    173
    Я думал я вы*бнусь своими знаниями, а тут уже смотрю за меня этот вариант написали (ON DUPLICATE KEY UPDATE) :)

    А так, ТС, у тебя жестко все написано.
    1. Функция exists() благодаря предложенному варианту выше не нужна.
    2. Нет проверки игрока на .hasPlayedBefore() - что и возвращает boolean того, был ли игрок раньше на сервере. Без этой проверки ты выполняешь лишний запрос на поиск того же игрока в БД. И этот поиск игрока в БД с вариантом выше
      не нужен получается больше вообще. Зачем тебе проверять есть ли игрок в БД, чтобы его добавить, когда MySQL всё сама за тебя проверит? Короче если будешь использовать все как есть сейчас, добавляй проверку player.hasPlayedBefore(). А если будешь использовать "ON DUPLICATE KEY ...", то можно и не делать
    3. Куча разделенных запросов, когда их надо максимально объединять между собой. Один запрос на одну функцию. Так нельзя, это один из самых базовых принципов (простейших просто, которые надо обязательно знать) оптимизации при работе с БД
     
  11. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Это просто был один из примеров юза. И hasPlayedBefore соснет после вайпа папки с игроками.
     
  12. Bars

    Bars Старожил Девелопер Пользователь

    Баллы:
    173
    Знаю. Просто я не вижу смысла ее вайпать. Но если скомбинировать два этих способа, то будет вообще изящно: если папка с игроками будет удалена, просто сделается запрос (выше). А если игрок есть - запрос сэкономится
     
Статус темы:
Закрыта.

Поделиться этой страницей