Перейти к содержимому


Как инициировать последнюю добавленную строку в таблицу MySQL


  • Вы не можете ответить в тему
Сообщений в теме: 6

#1 R.Sergey

    Администратор

  • Администраторы
  • 2810 сообщений
Репутация: 332
Мастер

Отправлено 04 May 2013 - 01:58 PM

Я использую

mysql_insert_id();

но http://php.net/ пишет, что

Данное расширение устарело, начиная с версии PHP 5.5.0, и будет удалено в будущем.


Как получаете ID последней добавленной строки вы?
  • 0

#2 badisoft

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 5075 сообщений
Репутация: 786
Мастер

Отправлено 04 May 2013 - 07:48 PM

Я стараюсь вообще не использовать (собственно, ни разу и не использовал), т.к. при активно используемой базе с момента получения инфы от mysql_insert_id до ее использования правильный результат может измениться. Возможно, что именно поэтому функцию и убирают.
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#3 R.Sergey

    Администратор

  • Администраторы
  • 2810 сообщений
Репутация: 332
Мастер

Отправлено 04 May 2013 - 08:40 PM

Я стараюсь вообще не использовать (собственно, ни разу и не использовал), т.к. при активно используемой базе с момента получения инфы от mysql_insert_id до ее использования правильный результат может измениться. Возможно, что именно поэтому функцию и убирают.


Согласен может измениться, но на данный момент делаю что-то типа мини-биллинга и пользователь планируется один, хотя в будущем это может и измениться.
Потому и вопрос задал.

Вот ситуация.
В таблицу добавляется строка с товаром и информацией о товаре.
Некоторая из этой информация (например характеристики товаров) у каждого товара разные, при этом каждая характеристика может повторяться для одного и того же товара, а другая нет.
Пример

футболка красная 46 украина
футболка синяя 46 украина
футболка красная 46 США



Для облегчения фильтрации по характеристикам создал еще одну таблицу куда записываются именно характеристики.
в таблице получается
| ID футболки | название характеристики | значение |
итого могут возникнуть несколько абсолютно одинаковых строк, соответственно, т.е. нет идентификатора.
поэтому в эту таблицу добавил идентификатор из предыдущей таблицы

| ID из списка товаров | ID футболки | название характеристики | значение |

теперь все нормально, но откуда брать этот самый айди если не использовать
mysql_insert_id();

З.Ы. Возможно сама логика не правильная. :mellow:

З.Ы. Может не заморачиваться с этой дополнительной таблицей для характеристик, и более правильно будет implod'ить все эти характеристики в одну строку например по маске
.......  optionID:variantID | optionID:variantID ......
и записать в туже таблицу, а при фильтрации уже запихивать все в массивы и разруливать уже в них, но хотелось бы знать наиболее правильное решение именно при такой постановке задачи, т.к. она время от времени также имеет место быть.
  • 0

#4 badisoft

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 5075 сообщений
Репутация: 786
Мастер

Отправлено 05 May 2013 - 01:06 AM

в таблице получается | ID футболки | название характеристики | значение | итого могут возникнуть несколько абсолютно одинаковых строк, соответственно, т.е. нет идентификатора.

При описанном раскладе одинаковых строк, как мне кажется, возникнуть не может. Ведь есть четкий критерий уникальности записи - ID футболки+свойства товара. Просто добавлять записи в такую таблицу надо не по INSERT, а по REPLACE, тогда дублирующаяся запись будет перезаписана поверх и одинаковых строк не будет. Это КАК МНЕ ДУМАЕТСЯ исходя из краткого описания ситуации. У меня так в "простейшем ЧПУ" записи добавляются-перезаписываются. Два индекса, оба уникальны, насколько я помню алгоритм. При добавлении записи если хоть одно поле совпадает, то не создается новая запись, а перезаписывается старая. Как-то так..

PS. Смутно пишу, понимаю :). Но и сам я смутный на текущий момент. Праздники :).
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#5 R.Sergey

    Администратор

  • Администраторы
  • 2810 сообщений
Репутация: 332
Мастер

Отправлено 05 May 2013 - 09:04 AM

Ну какже не может если может. я же описал выше пример
Смотри

айди товара - 2050
свойства футболки
цвет -красный
размер -46

получается 2 строки
2050 - красный
2050 - 46

второй товар
айди товара - 2050

свойства футболки
цвет -красный
размер -44


получается 2 строки
2050 - красный
2050 - 44

вот тебе уже повторяется строка
2050 - красный

а перезаписывать ее нельзя т.к. первая строка относится к одной футболке а вторая такая же уже к другой.
  • 0

#6 badisoft

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 5075 сообщений
Репутация: 786
Мастер

Отправлено 05 May 2013 - 03:32 PM

а перезаписывать ее нельзя т.к. первая строка относится к одной футболке а вторая такая же уже к другой.

Видимо, я чего-то не понимаю. Почему первая строка "2050 - красный" относится к одной футболке, а вторая к другой? Ведь ID=2050, т.е. это один и тот же товар?
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#7 badisoft

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 5075 сообщений
Репутация: 786
Мастер

Отправлено 05 May 2013 - 04:54 PM

О! На ловца и зверь бежит! Самому понадобилась эта функция. Вместо нее можно использовать LAST_INSERT_ID() из функций SQL.
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)