PDA

Просмотр полной версии : [Вопрос] Мускулистая СУБД



Josan_Solomon
18.11.2018, 02:15
Hello, World! Прошу прощения за столь "непрофессиональный" вопрос, но можно ли сделать так, чтобы после запроса в бд (в частности, mysql_tquery), который создает там новую строку (игрок, траснспорт или дом), возвращалось его Auto_Increment значение первичного ключа из бд? Думаю, слишком быдлокостыльно будет после запроса на добавление в бд посылать сразу же еще один запрос - на получение ID. И вообще, есть ли какие-либо продвинутые мануалы по MySQL? С уроками по скрытым функциям, триггерам, внешним ключам и тд и тп?

ziggi
18.11.2018, 05:07
Функция cache_insert_id() вернёт то, что ты хочешь.

Josan_Solomon
18.11.2018, 17:02
Я попробовал на новой регистрации. Вернуло ник, а не ид в бд. Хотя ид задан как первичный ключ. Как мне переопределить возвращаемое значение?

ziggi
18.11.2018, 19:46
Покажи структуру таблицы

Josan_Solomon
19.11.2018, 01:52
Вот. Поле id - первичный ключ с автоинкрементом, а возвращается login (причем каким-то чудесным образом помещается в 32-х битную переменную - не массив)
https://imgur.com/a/HAtd3s8

ziggi
19.11.2018, 02:58
Вот. Поле id - первичный ключ с автоинкрементом, а возвращается login (причем каким-то чудесным образом помещается в 32-х битную переменную - не массив)
https://imgur.com/a/HAtd3s8

Покажи запрос и обработку результата его исполнения.

Josan_Solomon
19.11.2018, 22:58
Запрос (до форматирования):

"INSERT INTO `accounts` (`login`, `password`, `email`, `mujik`, `skin`) VALUES ('%s', '%s', '%s', '%d', '%d')";

А вот сам код обращения:

mysql_query(dbHandle, query);
player_info[playerid][pID] = cache_insert_id();
printf("ID нового аккаунта: %s", player_info[playerid][pID]);

И в консоли отображается не ид, а ник.

Josan_Solomon
19.11.2018, 23:30
И еще, о другом. Допустим у меня есть покупка авто. При покупке меняются две таблицы - таблица игроков и таблица машин. Так же с домом. Можно изменение двух таблиц сделать одним запросом?

DeimoS
20.11.2018, 08:04
Эмм, а почему там "%s", если ID - число?. Да и кэш от запроса ещё обработать нужно, прежде чем писать cache_insert_id.

Ответ на второй вопрос: щёлк (https://www.google.ru/search?num=30&newwindow=1&ei=p4fzW-euOcyYsgGwmZiYCg&q=update+%D0%BF%D0%BE+%D0%BD%D0%B5%D1%81%D0%BA%D0%BE%D0%BB%D1%8C%D0%BA%D0%B8%D0%BC+%D1%82%D0%B0%D0%B1%D0%BB%D0%B8%D1%86%D0%B0%D0%BC+mysql&oq=update+%D0%BF%D0%BE+%D0%BD%D0%B5%D1%81%D0%BA%D0%BE%D0%BB%D1%8C%D0%BA%D0%B8%D0%BC+%D1%82%D0%B0%D0%B1%D0%BB%D0%B8%D1%86%D0%B0%D0%BC+mysql&gs_l=psy-ab.3...3882.8593..8921...0.0..0.135.2856.0j22......0....1..gws-wiz.......0i71j0i13j0i7i30j0i8i7i30.efoZ971-Bcw).

Josan_Solomon
22.11.2018, 12:24
А как обработать кэш при создании (не изменении/выбора) строки?

Seviel
22.11.2018, 13:26
То что ник выводит это странно, но возможно ты просто выводишь не верно?


printf("ID нового аккаунта: %s", player_info[playerid][pID]); // - %s - строка
printf("ID нового аккаунта: %d", player_info[playerid][pID]); // - %d || %i - целое число


Пример запроса на изменение в двух таблицах:



UPDATE `accounts`,`vehicles` SET `accounts`.`cash`='%d',`vehicles`.`owner`='%d' WHERE `accounts`.`id`='%d' OR `vehicles`.`id`='%d'

DeimoS
22.11.2018, 13:38
А как обработать кэш при создании (не изменении/выбора) строки?

Смотря какая версия плагина.


Просто скажи версию плагина, опиши что хочешь сделать и дай запрос, который нужно отправить.