За последние 24 часа нас посетили 47848 программистов и 1807 роботов. Сейчас ищут 1211 программистов ...

Как узнать AUTO_INKREMENT

Тема в разделе "MySQL", создана пользователем Ximik, 4 мар 2007.

  1. Ximik

    Ximik Активный пользователь

    С нами с:
    22 фев 2007
    Сообщения:
    108
    Симпатии:
    0
    Как узнать какой сейчас ключ будет выставлен записи, если я ее запишу.
    Если б у меня в таблице не было пропусков, то б я сделал count, а так не знаю даже.
    Помогите плз
     
  2. Vladson

    Vladson Старожил

    С нами с:
    4 фев 2006
    Сообщения:
    4.040
    Симпатии:
    26
    Адрес:
    Estonia, Tallinn
    Код (Text):
    1. SELECT MAX(`имя_поля`)+1 as `next_id` FROM `имя_таблицы`
     
  3. Ximik

    Ximik Активный пользователь

    С нами с:
    22 фев 2007
    Сообщения:
    108
    Симпатии:
    0
    Большое спасибо.
     
  4. Mavir

    Mavir Guest

    После вставки значения вызывать
    Код (Text):
    1. SELECT LAST_INSERT_ID()
    или функцию PHP - mysql_insert_id
     
  5. pel

    pel Активный пользователь

    С нами с:
    19 янв 2007
    Сообщения:
    569
    Симпатии:
    0
    Адрес:
    Симферополь
    А если последние 10 id были удалены? Скажем, всего было 20 записей, посл. 10 удалили. Ваш запрос выдаст 11, а должно быть 21. Так ведь?

    Имхо, Mavir прав. Только это уже после вставки используется...
     
  6. eduha

    eduha Активный пользователь

    С нами с:
    8 ноя 2006
    Сообщения:
    278
    Симпатии:
    0
    Адрес:
    Караганда
    Тогда из запроса
    Код (Text):
    1. SHOW TABLE STATUS LIKE 'table'
    вытащить значение столбца Auto_increment
     
  7. dark-demon

    dark-demon Активный пользователь

    С нами с:
    16 фев 2007
    Сообщения:
    1.920
    Симпатии:
    1
    Адрес:
    леноград
    пока не вставишь - не узнаешь. если очень хочется знать - выставляй id руками. например, по предложенной выше формуле.
     
  8. Dryg

    Dryg Активный пользователь

    С нами с:
    21 июл 2007
    Сообщения:
    7
    Симпатии:
    0
    Думаю что сдесь могу задать свой вопрос, вроде бы по теме . . .

    У меня есть таблица, поля login и id_user

    есть форма, где пользователь пишет свой логин. Идея простая - нужно определить последний (max) id увеличить на 1, присвоить полученное число переменной и передать переменную в запрос :

    Код (Text):
    1. $query_user = "insert into user
    2.                values(
    3.                       '".$id."',
    4.                       '".$login."'
    5.                )";
    Вопрос - как мне узнать max id и присвоить его переменной $id

    Вы выше писали запросы, но что потом и как все это по шагам делается ? Целый день сегодня голову ломал. . .

    Спасибо за ответы :)
     
  9. Dryg

    Dryg Активный пользователь

    С нами с:
    21 июл 2007
    Сообщения:
    7
    Симпатии:
    0
    Вот я решил проблему. Аж сам рад, что дошло. . .

    /
    Код (Text):
    1. /запрос, получение максимального значения id_user
    2. $create_q = "SELECT id_user FROM user";//построение запроса
    3. $query = $db->query($create_q);//сам запрос
    4. $result_id = $query->num_rows;//получаю результат - число столбцов
    5. $result_id++;
    6. //**//
    7. $create_q = "insert into user
    8.                values(
    9.                       '".$result_id."',
    10.                       '".$login."'
    11.                )";
    12.  
    13. $query = $db->query($create_q);
    14.  
    15. if($query)
    16. {
    17.  echo 'Ваш логин добавлен'.'<br/>';
    18. }
    19. else echo 'Проверте данные логина'.'<br/>';
    20. exit();
    Конечно есть недостатки, если 2 или больше пользователя одновременно попытаются выполнить запрос, можно решить эту проблему как то ?

    И если есть еще недостатки этого запроса , скажите
     
  10. Hight

    Hight Старожил
    Команда форума Модератор

    С нами с:
    5 мар 2006
    Сообщения:
    7.153
    Симпатии:
    0
    Адрес:
    из злой параллельной вселенной
    Dryg
    тааак, правила читаем, аватарку меняем... Разрешены только личные фото...
     
  11. Dryg

    Dryg Активный пользователь

    С нами с:
    21 июл 2007
    Сообщения:
    7
    Симпатии:
    0
    Все уже убрал фотку...
     
  12. armadillo

    armadillo Активный пользователь

    С нами с:
    6 апр 2007
    Сообщения:
    2.380
    Симпатии:
    0
    Адрес:
    Russia, Moscow
    Классический пример как НЕ НАДО делать. Видно непонимание основ. Ты хоть сортировку массивов когда-нибудь делал?
    Количество операций в цикле подсчитать можешь?
    1) ты перебираешь всю базу, чтобы узнать количество записей. Это само по себе жуть, плюс тут только что показали что присвоенный ид не обязан быть количество строк+1.
    2) чтобы узнать какой ид присвоен, используется команда mysql_insert_id() сразу после вставки. Этого достаточно для всех случаев жизни. Если тебе по религиозным соображениям надо узнать какой индекс будет вставлен заранее, то используй команду SHOW TABLE STATUS, чтобы узнать текущее значение автоинкремента. Но это не гарантирует, что будет вставлен именно он - между запросом на текущий ид и вставкой может вклиниться другой пользователь и вставить строку.
    Единственный способ гарантированно узнать ид - спросить mysql после вставки.