2012-01-08 3 views
3

Я настраиваю событие в php и сохраняю его в mysql. Позже я хочу обновить событие, но для того, чтобы узнать, какое событие нужно обновить, я использую время его создания.Использование идентификатора для строки mysql

Однако, если несколько событий начинаются с той же секунды, я могу столкнуться с проблемами по линии, если у нас много пользователей. Мое решение - проверить время начала и количество пользователей, что, по моему мнению, должно быть достаточно уникальным. Это нормально? есть ли лучший способ сделать это?

Во-первых, при создании мероприятия:

$starttime = time(); 
mysql_query("INSERT INTO events (userid, starttime) 
      VALUES ('$userid', '$starttime')"); 

Позже, обновляя событие:

mysql_query("UPDATE events 
      SET newdata='$newdata' 
      WHERE starttime='$starttime' 
      AND userid='$userid'"); 

ответ

6

Плохо плохой путь. Просто поместите auto_incrementing первичного ключа ID поле в этой таблице, которая даст вам гарантированное уникальное без повтора значения можно однозначно идентифицировать строку с без какого-либо страха перекрывается/конфликтов:

ALTER TABLE events ADD id int unsigned primary key auto_increment; 

Вы можете получить это значение автоматически после запроса на вставку:

$sql = "INSERT ..."; 
    $result = mysql_query($sql) or die(mysql_error()); 
    $new_id = mysql_insert_id(); // see here: http://us2.php.net/manual/en/function.mysql-insert-id.php 

    ... other stuff... 

    $sql = "UPDATE ... WHERE id = $new_id;": 
    $result = mysql_query($sql) or die(mysql_error()); 
+0

Я скопировал вставку mysql, но получил ошибку в отношении синтаксиса, который не соответствует версии моего сервера. в 'unsigned int primary key auto_increment'; Он говорит в db MySQL 5.0.45, а также говорит mysql client 5.0.22 (я предполагаю, что одна из них - это версия). Благодаря! –

+0

oops, должно быть 'int unsigned'. Я отредактирую ответ. –

+0

Хорошо, теперь это сработало. добавлена ​​колонка. спасибо –

1

Используйте mysql_insert_id(), чтобы получить значение поля автоинкремент в таблице в конце предыдущего INSERT в той же связи.