Re: MySQL (F.A.Q.) -
Stepashka - 19.10.2015
Quote:
Фракция
Игрок
Ранг
Члены- id игрока
- id фракции
- дата вступления в фракцию
- дата выхода из фракции
Ранги- id игрока
- id ранга
- дата получения ранга
- дата потери ранга
- Причина потери
|
Не благодари.
Re: MySQL (F.A.Q.) -
White_116 - 19.10.2015
Quote:
Originally Posted by Stepashka
Не благодари.
|
А теперь учи вложенным запросам
Re: MySQL (F.A.Q.) -
ZiGGi - 19.10.2015
Quote:
Originally Posted by White_116
А теперь учи вложенным запросам 
|
Тут JOIN запросов вполне достаточно.
Re: MySQL (F.A.Q.) -
themakar - 02.01.2016
Часто происходит потеря сигнала с базой.
Стоит OpenServer на Windows 7, это нормально для этой сборки или же можно что-то подкрутить в настройках, кто работает на этой сборке подскажите пожалуйста.
Re: MySQL (F.A.Q.) -
Stepashka - 02.01.2016
Quote:
Originally Posted by themakar
Часто происходит потеря сигнала с базой.
Стоит OpenServer на Windows 7, это нормально для этой сборки или же можно что-то подкрутить в настройках, кто работает на этой сборке подскажите пожалуйста.
|
Попробуй увеличить таймаут ожидания в настройках базы.
Re: MySQL (F.A.Q.) -
themakar - 02.01.2016
Quote:
Originally Posted by Stepashka
Попробуй увеличить таймаут ожидания в настройках базы.
|
wait_timeout = 60
interactive_timeout = 30
Re: MySQL (F.A.Q.) -
Davidoff - 03.01.2016
Всем привет!
Имеются 2 таблицы:
Accounts: id | name | pass | chars
Characters: id | from | name | level
Вопрос: Как лучше привязать к аккаунту персонаж?
Путём имя аккаунта с полей "from"? String
Или путём id аккаунта с полей "from"? Int
И на последок, как привязать эти поля к друг другу? На примере пожалуйста.
Re: MySQL (F.A.Q.) -
Stepashka - 04.01.2016
Quote:
Originally Posted by themakar
wait_timeout = 60
interactive_timeout = 30
|
Очевидно эти. Если не поможет, веди логи и ищи причину дисконектов.
Quote:
Originally Posted by Davidoff
Всем привет!
Имеются 2 таблицы:
Accounts: id | name | pass | chars
Characters: id | from | name | level
Вопрос: Как лучше привязать к аккаунту персонаж?
Путём имя аккаунта с полей "from"? String
Или путём id аккаунта с полей "from"? Int
И на последок, как привязать эти поля к друг другу? На примере пожалуйста.
|
По средствам уникального поля.
Второе.
Скриптово, можно конечно прописать зависимости в базе, но ты больше с ними намучаешься чем они тебе помогут.
Re: MySQL (F.A.Q.) -
Davidoff - 04.01.2016
Quote:
Originally Posted by Stepashka
Очевидно эти. Если не поможет, веди логи и ищи причину дисконектов.
По средствам уникального поля.
Второе.
Скриптово, можно конечно прописать зависимости в базе, но ты больше с ними намучаешься чем они тебе помогут.
|
Как это сделать? покажите пример пожалуйста.
Re: MySQL (F.A.Q.) -
stabker - 04.01.2016
Quote:
Originally Posted by Davidoff
Как это сделать? покажите пример пожалуйста. 
|
В Characters добавить поле account_id, которое будет хранить значение id из accounts (т.е. какому аккаунту принадлежит персонаж). Потом можно будет выбирать персонажей так:
SELECT * FROM characters WHERE account_id = (SELECT id FROM accounts WHERE name="Davidoff")
Re: MySQL (F.A.Q.) -
prineside - 05.01.2016
Quote:
Originally Posted by Davidoff
Всем привет!
Имеются 2 таблицы:
Accounts: id | name | pass | chars
Characters: id | from | name | level
Вопрос: Как лучше привязать к аккаунту персонаж?
Путём имя аккаунта с полей "from"? String
Или путём id аккаунта с полей "from"? Int
И на последок, как привязать эти поля к друг другу? На примере пожалуйста.
|
Уточните, в какой базе они имеются.
Полагаю, речь идет о MySQL, и о движке MyISAM, который используется чаще всего (если не ошибаюсь, по умолчанию).
Реляционные СУБД как раз и были разработаны для таких задач.
Отвечу кратко - добавьте внешний уникальный ключ в таблицу Characters на Accounts.id
PHP код:
ALTER TABLE `Characters` # Изменить таблицу Characters
ADD COLUMN `account` INT(11) NULL, # Добавить поле 'account' (должно иметь тот же тип данных, что и Accounts.id), NULL значит "разрешить использовать пустое значение" (в вашем случае это значит "персонажам могут быть не назначены аккаунты" - полезно, например, при передаче аккаунта, но если вы это делать не планируете, напишите NOT NULL)
ADD UNIQUE INDEX `account` (`account`), # Добавить уникальный индекс 'account' на одноименное поле. Это не позволит добавить в таблицу две записи с одинаковой ссылкой на аккаунт (акканут не сможет иметь больше 1 персонажа). Если вы хотите дать возможность игрокам создавать несколько персонажей на один аккаунт, не пишите эту строку
ADD CONSTRAINT `fk_account_character` FOREIGN KEY (`account`) REFERENCES `Accounts` (`id`) ON UPDATE CASCADE ON DELETE CASCADE; # Добавить внешний ключ Character.account к Accounts.id, при изменении ID аккаунта - изменять соответственно Character.account, при удалении аккаунта соответственно удалять персонажей аккаунта
Не слушайте тех, кто утверждает, будто связи в базе данных вам только головную боль добавят. Все как раз наоборот. Связи позволяют держать базу в целом виде - вы будете уверены в том, что аккаунты не ссылаются на несуществующих персонажей. Также обратите внимание на ON UPDATE и ON DELETE - в примере выше, если удалить запись из Accounts, все связанные персонажи также будут удалены - как это применить вы можете решить сами (также можно автоматически установить NULL или запретить удаление аккаунта, если у него есть связанный персонаж), а если ID персонажа изменится, он также изменится во всех связанных таблицах.
Кстати, пример выше должен выглядеть так
PHP код:
SELECT Characters .*
FROM Characters, Accounts
WHERE Accounts.name = "Davidoff"
AND Characters.account = Accounts.id
Думаю, в Интернете полно информации о всем выше написанном, если чего-то не нашли или не поняли, спрашивайте сюда
P.S> Я ответил на вопрос, в котором нет ничего про скрипты и программы. Скажу еще вот что - использование связей в субд сохраняет целостность базы, и не освобождает от проверок в скриптах игрового мода. Это значит, что вы по-прежнему должны проверять, существуют ли аккаунты, которым вы создаете персонажей и т.п.
Кстати, СуБД со связями между сущностями может вас обругать, но только если ваши скрипты работают неправильно или происходят какие-то сбои. Поверьте, лучше один раз увидеть ошибку и не создать новому игроку персонаж, чем через полгода обнаружить сотни аккаунтов без персонажей или, что еще хуже, с одинаковыми ID персонажей
Re: MySQL (F.A.Q.) -
Davidoff - 06.01.2016
Спасибо большое за ответы!
Re: MySQL (F.A.Q.) -
themakar - 28.03.2016
Можно как то запретить вносить в таблицу новые строки на стороне sql сервера?
Допустим я хочу иметь в таблице максимум 144 строки
Re: MySQL (F.A.Q.) -
ea8de1 - 28.03.2016
Quote:
Originally Posted by themakar
Можно как то запретить вносить в таблицу новые строки на стороне sql сервера?
Допустим я хочу иметь в таблице максимум 144 строки
|
Код:
ALTER TABLE table MAX_ROWS=144
Re: MySQL (F.A.Q.) -
ea8de1 - 13.04.2016
В таблице table возможны 'NULL'-значения у некоторых колонок.
Как преобразовать все получаемые значения из 'NULL' в '0' (нуль) в таком запросе?
Код:
SELECT t.* FROM table t
Нужно что-то наподобие этого, но чтобы работало с
t.*
Код:
SELECT COALESCE(t.field,0) FROM table t
Re: MySQL (F.A.Q.) -
Stepashka - 13.04.2016
Код:
SELECT IFNULL(t.field, 0) FROM table t
Re: MySQL (F.A.Q.) -
ea8de1 - 13.04.2016
Quote:
Originally Posted by Stepashka
Код:
SELECT IFNULL(t.field, 0) FROM table t
|
Это не то. Я имел в виду что-то вроде этого, но такое использование приводит к ошибке:
Код:
SELECT IFNULL(t.*,0) FROM table t
Re: MySQL (F.A.Q.) -
Stepashka - 13.04.2016
Quote:
Originally Posted by ea8de1
Это не то. Я имел в виду что-то вроде этого, но такое использование приводит к ошибке:
Код:
SELECT IFNULL(t.*,0) FROM table t
|
Только перечислять каждое поле. Или запрещать нуль при создании таблицы.
Re: MySQL (F.A.Q.) -
ea8de1 - 13.04.2016
Quote:
Originally Posted by Stepashka
Только перечислять каждое поле. Или запрещать нуль при создании таблицы.
|
Жаль(
Re: MySQL (F.A.Q.) -
themakar - 21.05.2016
PHP код:
SELECT `data` FROM `users`WHERE `user_id` = '1'
поле data типа blob, что вернет мне этот запрос, спрашиваю на будущие, проверить самому пока нет возможности.