За последние 24 часа нас посетили 21688 программистов и 1020 роботов. Сейчас ищут 686 программистов ...

MYSQL. Создать столбец если необходимо в его записать данные.

Тема в разделе "MySQL", создана пользователем Naykon, 21 май 2019.

  1. Naykon

    Naykon Активный пользователь

    С нами с:
    15 ноя 2015
    Сообщения:
    65
    Симпатии:
    0
    Здравствуйте уважаемые участники. Подскажите пожалуйста есть база данных my_bd в ней есть таблица stat.
    Задача не простая тем что мне ее трудно вам изъяснить, но я постараюсь.

    В таблице stat есть PRYMARY (ID_Client) - он уникальный и для каждого пользователя в базе имеет свое значение возьмем для примера "ID_001". Таблица должны уметь расширяться при определенных условиях, под "расширяться" я имею введу что в нее добавляется столбец "TIME_X" если необходимо сделать в его запись.

    Если необходимый столбец "TIME_X" уже есть, то надо в ячейке "ID_001" - "TIME_X" сделать запить "VALUE".. но если "TIME_X" нет то нужно есть создать и сразу сделать запись "VALUE" в ячейке "ID_001" - "TIME_X"... - задача была бы проста если бы не еще 1 условие.

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

    Параметр "ID_001" и столбец "TIME_X" может быть или не быть... если они оба есть то просто сделать запись. Если нет столбца "TIME_X" но есть параметр "ID_001" в столбце (ID_Client) то нужно создать столбец и сделать запись. Если нет параметра "ID_001" в столбце (ID_Client) но есть столбец "TIME_X" то нужно создать "ID_001" в столбце (ID_Client). Если нет "ID_001" в столбце (ID_Client) и нет столбца "TIME_X" то нужно их создать и сделать запись.

    Это все нужно сделать 1, по всей видимости длинным запросом..
     

    Вложения:

    • admin_1.jpg
      admin_1.jpg
      Размер файла:
      101,5 КБ
      Просмотров:
      3
  2. runcore

    runcore Старожил

    С нами с:
    12 окт 2012
    Сообщения:
    3.625
    Симпатии:
    158
    Правильнее будет добавить новую таблицу, напр stat_values. связать её с таблицей stat через полt id_client.
    И потом уже при необходимости добавлять или обновлять значения в этой таблице, те работать со строками а не со столбцами.
     
  3. Valick

    Valick Активный пользователь

    С нами с:
    12 авг 2018
    Сообщения:
    1.911
    Симпатии:
    328
    @Naykon, для начала вам надо почитать книг на тему БД. Понять, что такое реляционная база данных и для чего же она нужна. Потом почитать о принципах построения архитектуры БД и в частности о правилах нормализации. А потом вернёмся к этому разговору.
     
  4. Naykon

    Naykon Активный пользователь

    С нами с:
    15 ноя 2015
    Сообщения:
    65
    Симпатии:
    0
    Задача - сбор статистики посещаемости для игрового сервера. Статистика собирается онлайн с секундах. У каждого игрока есть свой уникальный ID и он сообщает его серверу в момент подключения. Я хотел сделать чтоб в каждое GetTime(мировое время в секундах) соответствовало TIME_X таким образом TIME_1234, TIME_12345 и т д каждую секунду. Но игроки подключаться к серверу не каждую секунду по этому я хочу чтоб TIME_X создавался только тогда когда игрок подключается или уходит с сервера. - чтоб не плодить столбцы (ибо зачем создавать столбец если туда нечего записывать).

    Предложите альтернативу если говорите что так не делают..
     
  5. Naykon

    Naykon Активный пользователь

    С нами с:
    15 ноя 2015
    Сообщения:
    65
    Симпатии:
    0
    чем принципы построения БД противореят моим требованиям? да, решение не популярное то подобные действия не будут происходить 100 в секунду. Пожалуйста отвечайте предметно без отсылов куда-то там..
     
  6. Artur_hopf

    Artur_hopf Активный пользователь

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
    @Naykon просто нельзя создать просто так столбец, у вас он уже должен быть, и быть равен по умолчанию NULL . то есть пустой, и когда вам там что то надо записать , надо делать update этого столбца. И даже это не правильно.
    Вам надо когда пользователь входит в игру просто записывать в строку его id и время какое вы там хотите. А потом когда выходит записывать в строку id и время. И так каждый раз.