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

    +161

    1. 1
    2. 2
    3. 3
    $Qstatus = $osC_Database->query('select max(cms_id) as cms_id from cms');
            $Qstatus->execute();
            $cms_id = $Qstatus->valueInt('cms_id') + 1;

    Код в OSCommerce использующийся для увеличения id на 1.

    Запостил: Insane18, 07 Апреля 2011

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

    • Не доверяй sql, доверяй php.
      Ответить
    • вообще имеет смысл, если записей в cms_id нет, так как max() вернет NULL.
      Ответить
    • Это не совсем говнокод, просто вы не поняли зачем так сделано. Я раньше тоже считал это аццким говнокодом. Первый раз увидел такое в phpBB 2.x.
      Суть в том, что на cms_id стоит autoincrement. И если вы случайно добавляете строку в конец таблицы, потом ой, удалите ее, то id все равно уже на единицу прыгнет. А вот таким способом как приведен в коде это пытаются побороть.

      ИМХО.
      Ответить
      • а "cms" в именах энтитей призвано убеждать нас что это - CMS
        Ответить
      • Нахрена?

        И, блин, я боюсь представить что делается после того, как удалится что-то в середине.
        Ответить
        • ну, что-то вроде

          UPDATE table SET id = id -1 WHERE id > $deleted_id ORDER BY id
          Ответить
          • Нахрена так делать?
            Ответить
            • Без понятия
              просто предположил как происходит delele в этой системе :)
              Ответить
              • Это риторический вопрос в пустоту. Гость скорее всего не ответит. : (
                Ответить
            • экономим айдишники, а то вдруг закончатся?
              Ответить
              • Хорошая вещь - экономия.
                Ответить
                • Экономика должна быть экономичной, как завещал нам товарищ Горбачёв.
                  Ответить
      • Так если есть автоинкремент, зачем +1 этот?
        Ответить
    • Это OsCommerce 3.0 alpha5.
      Говнокод действительно служит заменой auto_increment, а таблица cms хранит статьи.
      Ответить

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