Прошу помочь.
#1

Вообщем суть такова, пишу команду удаления авто, которая будет смещать все ID в таблице на -1, т.е допустим идут машинки по порядку (auto_increment) 1 2 3 4 5, и если я удаляю 3, то последующие, т.е 4 и 5 смещаются на -1.
Вот код, до которого додумался, но как смещать ид на -1, не довариваю.
PHP код:
if(strcmp(cmd"/deletecar"true) == 0)
    {
        new 
destroycarsql[256], carid;
         
destroycar GetPlayerVehicleID(playerid);
         
carid GetPlayerVehicleID(playerid);
         if(
GetPlayerState(playerid)==PLAYER_STATE_DRIVER)
        {
              
DestroyVehicle(destroycar);
              for( new 
CarInfo[carid][id]; MAXVEHICLESi++ )
            {
                
format(sqlsizeof(sql), "DELETE FROM `carinfo` WHERE `ID` = %d LIMIT 1"CarInfo[carid][id]);
                return 
mysql_query(sql);
            }
        }
    } 
Reply
#2

SET `ID` = `ID` -1
Что-то ещё?
Reply
#3

Категорически нельзя изменять auto_increment поля!
Reply
#4

Quote:
Originally Posted by Stepashka
Посмотреть сообщение
Категорически нельзя изменять auto_increment поля!
Это почему же? В моем случае, только это спасет.
Reply
#5

Quote:
Originally Posted by Mckenzy
Посмотреть сообщение
Это почему же? В моем случае, только это спасет.
Потому что вы нарушите всю структуру базы данных!
Reply
#6

Quote:
Originally Posted by Stepashka
Посмотреть сообщение
Потому что вы нарушите всю структуру базы данных!
Спасибо, не знал. Тогда помогите разобраться, проблема в следующем:
Quote:

сделал команду парк, которая работает, все хорошо. дропнул таблицу, id с auto_increment начинается с единицы, вообщем все как нужно. Машины в таблицу добавляются как нужно, т.е ид 1 2 3 4 5. Координаты тоже сохраняются хорошо, в дебаге пишет что все удачно. Но стоит удалить из таблицы одну машину, то следующую (допустим удалил 3 ид, и сразу купил, то присваивается 4) уже не запарковать. Паркуются только те авто, которые шли до удаленого. Смотрю дебаг, там все нормально.

Я хотел циклом сделать, что бы смещались иды, но теперь совсем не знаю что делать.
Reply
#7

У вас проблема в том что ID на сервере не те же самые которые даются базой данных, а вы пытаетесь использовать их как одно и тоже. Если честно то объяснять решение вашей проблемы очень долго и муторно и мне сейчас ну совсем не охота этого делать. Но по простому вам или серверные ID надо в базу писать кажды раз или наоборот ID из базы связывать с машиной, я бы рекомендовал второе.
Reply
#8

Quote:
Originally Posted by Stepashka
Посмотреть сообщение
ID из базы связывать с машиной
Хоть на пальцах объясните пожалуйста)
Reply
#9

Очень грубо, то так:
pawn Код:
enum {
    real_ID,
    db_ID,
}
new cars[MAX_VEHICLES][enum];

SELECT * FROM `carinfo`
далее обработка всех записей
for(new i; i < sizeof(cars); i++) {
    cars[i][db_ID] = //сюда сохраняем тот ID что принадлежит базе данных
    cars[i][real_ID] = CreateVehicle(...)
}
далее везде где нужно что-то сделать с машиной
бежим по циклу и делаем все что нужно:
pawn Код:
for(new i; i < sizeof(cars); i++) {
    if (vehicleif == cars[i][real_ID]) {
        printf("UPDATE `carinfo` SET closed = 1 WHERE ID = '%d'", cars[i][db_ID]);
        break;
    }
}
Reply
#10

А что если искать и сохранять авто не по ID, а допустим по нику игрока? Или это не надежно, как я думаю?
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)