1. PHP / Говнокод #3701

    +179

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    $sql=mysql_query("SELECT id FROM table");
    $id=mysql_num_rows($sql)+1;
    
    $qry=mysql_query("INSERT INTO table(id, .....)  VALUES ('$id','.....')")
        or die (mysql_error());

    Осуществление auto_increment-а!
    Угадайте, что будет если кто то удалить одну строку из таблицу?

    Запостил: gotha, 14 Июля 2010

    Комментарии (20) RSS

    • тупа как то ну хоть select max(id) использовал
      Ответить
      • а лучше в таблице указать auto_increment и не делать порнографию
        Ответить
        • не всегда. иногда нужны записи пронумерованные с от 1 до N инкрементом такого не добьешся он хранит своё максимальное значение
          Ответить
          • в этой задаче он делал auto_increment это чётко видно
            Ответить
            • Если удалить последнюю запись, а потом снова начать добавлять, то уже не будет работать как auto_increment.
              Ответить
          • это свое максимальное всегда можно задать, а лишнюю логику на каждый запрос незачем писать
            Ответить
          • id он на то и id, что должен быть уникальным для каждой конкретной записи. Если запись удалили, то больше не должно быть записи с таким id. А если нужны по порядку пронумерованные записи, то нужно вводить еще одно поле с нумерацией. Например number. И уж там нумеровать как твоей душе угодно.
            Ответить
            • вот реальная ситуация нужно выгружать в таблицу инфу о рейтингах топ 100 за день для последующей обработки. зачем там уникальное поле. есть дата есть позиция в топе. все зачем нужны лишние поля
              Ответить
              • если есть дата можно применить такую магию:

                id=секунды - const, где const=секунда в которой запустился проект
                Ответить
              • Мне тебя жаль, если ты не знаешь, зачем нужны уникальные поля.
                Например, что ты будешь делать, если надо будет принудительно поменять местами 2 позиции в топе?

                Узкоспецифических примеров, конечно, можно много придумать.
                Ответить
              • Это натуральный ключ, получаемый из входных данных, и быть он может чем угодно.

                В говне - синтетический. И наложение условий 'от 1 до N' на такой ключ само по себе говно
                Ответить
    • будет больно.
      Ответить
    • Подполковник Очевидный поясняет: mySQLные обезьяны имеют весьма смутное представление о том, что такое первичный ключ; зато в них палками вдолбили, что первая колонка должна называться id
      Ответить
      • Серди MySQLных есть и грамотные люди. Но мало.
        А вот пересечение множества PHPшников и множества MySQLщиков точно является подмножеством обезъян.
        Ответить
    • За такое надо убивать ещё в детстве. Только-только из пизды вынул и сразу за две ноги на его об пол.
      Ответить
      • а заодно и папку укуренного и мамку проститутку
        Ответить
      • Неужто в жизни ниразу ошибок не делали? Пускай живёт. Нужно давать шанс исправиться.
        Ответить
        • Тут как бы эмоции.

          Но если серьёзно, то
          а) зачем вытаскивать все записи чтобы узнать их количество
          б) как можно по количеству назначать ИД?
          ц) КО как бы намекает, что даже select max(id) тут плох, потому что к БД может обращаться более одного пользователя одновременно.
          д) используются непараметризованые запросы => д.1) возможны проблемы с безопасностью, д.2) проблемы с производительностью БД
          Чел не шарит в программировании (см пп.а, б), чел не шарит в программировании БД (пп. ц, д).
          Говнокод фееричен и я решил высказаться в таком же духе. Тут некоторые яйца рвут налево и направо, а я вот так поступаю.
          Ответить

    Добавить комментарий