Просмотр полной версии : [Вопрос] Дата вступления MySQL.
Здравствуйте. Подскажите пожалуйста, как в БД обозначить дату вступления и дату повышения игрока.
При назначении лидерки и вступления игрока я добавил:
PlayerInfo[params[0]][pDataInvite] = gettime();
А какой тип указать в БД? Полазил по интернету, прочитал что DATETIME выводит дату и время, как раз то, что мне нужно. Попробовал, но когда я назначил лидерку, ничего не произошло, в БД запись не обновилась, а осталась 0000-00-00 00:00:00
Если выбираю INT - то выводит просто целое огромное число.
Подскажите как быть и как это вывести потом в игре, через format например.
$continue$
25.08.2016, 03:28
gettime() возвращает UNIX Time (https://ru.wikipedia.org/wiki/UNIX-%D0%B2%D1%80%D0%B5%D0%BC%D1%8F)
Пример с WIKI:
new Hour, Minute, Second, Timestamp;
Timestamp = gettime(Hour, Minute, Second);
printf("%02d:%02d:%02d", Hour, Minute, Second);
printf("Seconds since midnight 1st January 1970: %d", Timestamp);
Советую использовать функцию NOW() (https://htmlweb.ru/php/mysql_date_time.php) и тогда тип столбца - DATETIME.
Т.е. если я использую NOW() он запишет один раз, без изменений, т.е если игрока приняли, записалась дата и все, а если потом повысили, то она уже не перезапишется?
И как тогда вывести мой PlayerInfo[params[0]][pDataInvite] через NOW? Подскажи пожалуйста.
$continue$
25.08.2016, 03:36
Не совсем понял, но почему дата принятия перезаписывается в зависимости от повышения игрока?
Т.е. если я использую NOW() он запишет один раз, без изменений, т.е если игрока приняли, записалась дата и все, а если потом повысили, то она уже не перезапишется?
Зачем это нужно? И как оно используется?
И как тогда вывести мой PlayerInfo[params[0]][pDataInvite] через NOW? Подскажи пожалуйста.
Значение из поля datetime, если не ошибаюсь, выводится как строка. Пр. Повышении игрока просто в то же поле еще раз запиши данные по такому же принципу, время обновится
Не совсем понял, но почему дата принятия перезаписывается в зависимости от повышения игрока?
Зачем это нужно? И как оно используется?
Дата принятия записывается единожды, но когда игрока кикнут, она должна обнулиться.
Потом при принятии в другую например фракцию, снова записывается.
А вот при повышении игрока уже она меняется, т.е. дата принятия не изменяется, а при повышении, перезаписывается.
А DataInvite хочу чтобы хранило в себе эту дату принятия, чтобы можно например было вывести в статистике игрока.
Или же можно как то сделать иначе?
Ну так какие проблемы? При вступлении во фракцию отправляй запрос с использованием NOW() на нужный столбец. Когда нужно выгрузить, выгружай как строку (соответственно, в массив). Когда нужно обнулить - обнуляй. Когда нужно обновить - обновляй. Всё работает точно так же, как и с другими столбцами. Для дат нет каких-то особенных условий, кроме определённого типа столбца в БД (о чём уже сказали) и, собственно, всё.
С повышением всё точно так же.
Или ты хочешь, чтоб мы тебе тут готовые запросы написали и рассказали куда их вставлять?
Если я не ошибаюсь, функция NOW () в плагине от Blue-G всегда возвращает нулевые значения
Если я не ошибаюсь, функция NOW () в плагине от Blue-G всегда возвращает нулевые значения
NOW() - это не функция плагина, это функция сервера. Если возвращается нулевое значение, то ваш MySQL сервер настроен неправильно. Гораздо надёжнее будет воспользоваться функцией SA-MP - gettime() и передать полученное значение в MySQL.
NOW() - это не функция плагина, это функция сервера. Если возвращается нулевое значение, то ваш MySQL сервер настроен неправильно. Гораздо надёжнее будет воспользоваться функцией SA-MP - gettime() и передать полученное значение в MySQL.
Тогда тип DataInvite в БД будет INT? Просто он записывает не дату, а целое число.
Тогда тип DataInvite в БД будет INT? Просто он записывает не дату, а целое число.
DATE/TIME/DATETIME
DATE/TIME/DATETIME
Он не обновляется, просто выводит 0000-00-00 00:00:00
Он не обновляется, просто выводит 0000-00-00 00:00:00
Если возвращается нулевое значение, то ваш MySQL сервер настроен неправильно. Гораздо надёжнее будет воспользоваться функцией SA-MP - gettime() и передать полученное значение в MySQL.
У тебя localhost?
Да, локалка.
- - - Добавлено - - -
Разобрался. Сделал такого плана через include mxdate
new string[50];
format(string, sizeof(string),"Дата вступления %s",date("%dd.%mm.%yyyy %hh:%ii:%ss",PlayerInfo[playerid][pInvited]));
ShowPlayerDialog(playerid, 100, DIALOG_STYLE_MSGBOX, "Дата вступления", string,"Ок","");
TheMallard
26.08.2016, 03:54
Нельзя использовать mxDate, воспользуйся (https://github.com/Open-GTO/time_t)
Нельзя использовать mxDate, воспользуйся (https://github.com/Open-GTO/time_t)
Почему нельзя?
Почему нельзя?
Он ошибочно определяет время. Да и он возвращает строку, что крайне нежелательно.
А я хранил всегда UNIX время в int. Это диагноз?
Он ошибочно определяет время. Да и он возвращает строку, что крайне нежелательно.
Настроил gettime что показывает все точно)
Настроил gettime что показывает все точно)
Хочешь использовать багованный конвертер - используй, тут до этого нет никому дела. Тебя всего лишь посоветовали действительно рабочий конвертер, и предупредили о давно известном факте (заметь, именно факте, о ошибках в mxDate всем давно известно). И что можно настроить в gettime? В нем нет нареканий, а ты лепишь некому непонятные костыли, когда можно делать все по уму.
Хочешь использовать багованный конвертер - используй, тут до этого нет никому дела. Тебя всего лишь посоветовали действительно рабочий конвертер, и предупредили о давно известном факте (заметь, именно факте, о ошибках в mxDate всем давно известно). И что можно настроить в gettime? В нем нет нареканий, а ты лепишь некому непонятные костыли, когда можно делать все по уму.
Я просто с этим не очень разобрался.
new year, month, day, hour, minute, second;
gmtime(gettime(), year, month, day, hour, minute, second);
И как вывести это в переменную pDataInvite? Чтобы сохраняло и показывало через format?
Я просто с этим не очень разобрался.
new year, month, day, hour, minute, second;
gmtime(gettime(), year, month, day, hour, minute, second);
И как вывести это в переменную pDataInvite? Чтобы сохраняло и показывало через format?
Там дан конкретный пример.
new string[50], year, month, day, hour, minute, second;
gmtime(PlayerInfo[playerid][pInvited], year, month, day, hour, minute, second);
format(string, sizeof(string),"Дата вступления %02d:%02d:%02d %02d.%02d.%04d",
hour, minute, second, day, month, year);
ShowPlayerDialog(playerid, 100, DIALOG_STYLE_MSGBOX, "Дата вступления", string,"Ок","");
Это переделанный пример, который ты кидал выше. И время тут возвращается по GMT, если нужно - плюсани свой часовой пояс в часы.
Powered by vBulletin® Version 4.2.0 Copyright © 2024 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot