SA-MP Forums

Go Back   SA-MP Forums > Non-English > Languages > Русский/Russian

Reply
 
Thread Tools Display Modes
Old 04/01/2016, 03:58 PM   #381
Stepashka
Godfather
 
Stepashka's Avatar
 
Join Date: Jul 2008
Location: near PC
Posts: 5,463
Reputation: 131
Default Re: MySQL (F.A.Q.)

Quote:
Originally Posted by themakar View Post
wait_timeout = 60
interactive_timeout = 30
Очевидно эти. Если не поможет, веди логи и ищи причину дисконектов.

Quote:
Originally Posted by Davidoff View Post
Всем привет!
Имеются 2 таблицы:
Accounts: id | name | pass | chars
Characters: id | from | name | level
Вопрос: Как лучше привязать к аккаунту персонаж?
Путём имя аккаунта с полей "from"? String
Или путём id аккаунта с полей "from"? Int
И на последок, как привязать эти поля к друг другу? На примере пожалуйста.
По средствам уникального поля.
Второе.
Скриптово, можно конечно прописать зависимости в базе, но ты больше с ними намучаешься чем они тебе помогут.
__________________
Клятва Страуструпа: "Я обязуюсь прилежно комментировать свой код, не использовать goto и следить за состоянием своих потоков и выделяемой памяти. Я обязуюсь не оставлять мусора в системе и избегать однобуквенных переменных. Ресет." © Куч
M&M GM
Status: ON HOLD

Stepashka is offline   Reply With Quote
Old 04/01/2016, 07:46 PM   #382
Davidoff
Little Clucker
 
Join Date: Sep 2013
Posts: 20
Reputation: 0
Default Re: MySQL (F.A.Q.)

Quote:
Originally Posted by Stepashka View Post
Очевидно эти. Если не поможет, веди логи и ищи причину дисконектов.

По средствам уникального поля.
Второе.
Скриптово, можно конечно прописать зависимости в базе, но ты больше с ними намучаешься чем они тебе помогут.
Как это сделать? покажите пример пожалуйста.
Davidoff is offline   Reply With Quote
Old 04/01/2016, 08:44 PM   #383
stabker
High-roller
 
Join Date: Mar 2012
Posts: 1,320
Reputation: 86
Default Re: MySQL (F.A.Q.)

Quote:
Originally Posted by Davidoff View Post
Как это сделать? покажите пример пожалуйста.
В Characters добавить поле account_id, которое будет хранить значение id из accounts (т.е. какому аккаунту принадлежит персонаж). Потом можно будет выбирать персонажей так:

SELECT * FROM characters WHERE account_id = (SELECT id FROM accounts WHERE name="Davidoff")
stabker is offline   Reply With Quote
Old 05/01/2016, 12:46 AM   #384
prineside
Huge Clucker
 
Join Date: Jan 2013
Posts: 276
Reputation: 114
Default Re: MySQL (F.A.Q.)

Quote:
Originally Posted by Davidoff View Post
Всем привет!
Имеются 2 таблицы:
Accounts: id | name | pass | chars
Characters: id | from | name | level
Вопрос: Как лучше привязать к аккаунту персонаж?
Путём имя аккаунта с полей "from"? String
Или путём id аккаунта с полей "from"? Int
И на последок, как привязать эти поля к друг другу? На примере пожалуйста.
Уточните, в какой базе они имеются.
Полагаю, речь идет о MySQL, и о движке MyISAM, который используется чаще всего (если не ошибаюсь, по умолчанию).
Реляционные СУБД как раз и были разработаны для таких задач.

Отвечу кратко - добавьте внешний уникальный ключ в таблицу Characters на Accounts.id
PHP Code:
ALTER TABLE `Characters`  # Изменить таблицу Characters
ADD COLUMN `accountINT(11NULL# Добавить поле 'account' (должно иметь тот же тип данных, что и Accounts.id), NULL значит "разрешить использовать пустое значение" (в вашем случае это значит "персонажам могут быть не назначены аккаунты" - полезно, например, при передаче аккаунта, но если вы это делать не планируете, напишите NOT NULL)
ADD UNIQUE INDEX `account` (`account`), # Добавить уникальный индекс 'account' на одноименное поле. Это не позволит добавить в таблицу две записи с одинаковой ссылкой на аккаунт (акканут не сможет иметь больше 1 персонажа). Если вы хотите дать возможность игрокам создавать несколько персонажей на один аккаунт, не пишите эту строку
ADD CONSTRAINT `fk_account_characterFOREIGN 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 Code:
SELECT Characters .* 
FROM CharactersAccounts
WHERE Accounts
.name "Davidoff"
AND Characters.account Accounts.id 
Думаю, в Интернете полно информации о всем выше написанном, если чего-то не нашли или не поняли, спрашивайте сюда

P.S> Я ответил на вопрос, в котором нет ничего про скрипты и программы. Скажу еще вот что - использование связей в субд сохраняет целостность базы, и не освобождает от проверок в скриптах игрового мода. Это значит, что вы по-прежнему должны проверять, существуют ли аккаунты, которым вы создаете персонажей и т.п.
Кстати, СуБД со связями между сущностями может вас обругать, но только если ваши скрипты работают неправильно или происходят какие-то сбои. Поверьте, лучше один раз увидеть ошибку и не создать новому игроку персонаж, чем через полгода обнаружить сотни аккаунтов без персонажей или, что еще хуже, с одинаковыми ID персонажей
__________________


Prineside DevTools





therainycat (prineside.com)
prineside is offline   Reply With Quote
Old 06/01/2016, 07:34 PM   #385
Davidoff
Little Clucker
 
Join Date: Sep 2013
Posts: 20
Reputation: 0
Default Re: MySQL (F.A.Q.)

Спасибо большое за ответы!
Davidoff is offline   Reply With Quote
Old 28/03/2016, 04:11 PM   #386
themakar
Big Clucker
 
Join Date: Nov 2015
Posts: 96
Reputation: 3
Default Re: MySQL (F.A.Q.)

Можно как то запретить вносить в таблицу новые строки на стороне sql сервера?
Допустим я хочу иметь в таблице максимум 144 строки
themakar is offline   Reply With Quote
Old 28/03/2016, 04:20 PM   #387
ea8de1
Big Clucker
 
Join Date: Oct 2013
Location: Russia
Posts: 86
Reputation: 19
Default Re: MySQL (F.A.Q.)

Quote:
Originally Posted by themakar View Post
Можно как то запретить вносить в таблицу новые строки на стороне sql сервера?
Допустим я хочу иметь в таблице максимум 144 строки
Code:
ALTER TABLE table MAX_ROWS=144
ea8de1 is offline   Reply With Quote
Old 13/04/2016, 02:58 PM   #388
ea8de1
Big Clucker
 
Join Date: Oct 2013
Location: Russia
Posts: 86
Reputation: 19
Default Re: MySQL (F.A.Q.)

В таблице table возможны 'NULL'-значения у некоторых колонок.
Как преобразовать все получаемые значения из 'NULL' в '0' (нуль) в таком запросе?
Code:
SELECT t.* FROM table t

Нужно что-то наподобие этого, но чтобы работало с t.*
Code:
SELECT COALESCE(t.field,0) FROM table t
ea8de1 is offline   Reply With Quote
Old 13/04/2016, 03:00 PM   #389
Stepashka
Godfather
 
Stepashka's Avatar
 
Join Date: Jul 2008
Location: near PC
Posts: 5,463
Reputation: 131
Default Re: MySQL (F.A.Q.)

Code:
SELECT IFNULL(t.field, 0) FROM table t
__________________
Клятва Страуструпа: "Я обязуюсь прилежно комментировать свой код, не использовать goto и следить за состоянием своих потоков и выделяемой памяти. Я обязуюсь не оставлять мусора в системе и избегать однобуквенных переменных. Ресет." © Куч
M&M GM
Status: ON HOLD

Stepashka is offline   Reply With Quote
Old 13/04/2016, 03:04 PM   #390
ea8de1
Big Clucker
 
Join Date: Oct 2013
Location: Russia
Posts: 86
Reputation: 19
Default Re: MySQL (F.A.Q.)

Quote:
Originally Posted by Stepashka View Post
Code:
SELECT IFNULL(t.field, 0) FROM table t
Это не то. Я имел в виду что-то вроде этого, но такое использование приводит к ошибке:
Code:
SELECT IFNULL(t.*,0) FROM table t
ea8de1 is offline   Reply With Quote
Reply

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
[GameMode] Basic MySQL Account Script [MySQL R7, cache functions, easydialog, Whirlpool, salted passwords] ReneG Gamemode Scripts 71 02/03/2014 11:48 AM
[GameMode] MySQL CLEAN GAMEMODE [Whirlpool, MySQL BlueG R7, Cache, Ready Package (Windows)] GiamPy. Gamemode Scripts 13 13/09/2013 04:31 PM
BlueG MySQL plugin - Failed (plugins/mysql.so: undefined symbol: _Z13stringvprintfPKcPc) linuxthefish Plugin Development 10 13/07/2013 10:56 AM
[Tool/Web/Other] MySQL DB Manager - Easily manage your MySQL databases with this remote application fiki574 Tools and Files 13 22/07/2012 09:41 AM


All times are GMT. The time now is 11:05 PM.


Powered by vBulletin® Version 3.8.6
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.