Операция с числами в sql

Тема в разделе "Как сделать...", создана пользователем SocMaster, 15 окт 2013.

  1. SocMaster

    SocMaster aka Hakerok

    Регистр.:
    26 июл 2011
    Сообщения:
    202
    Симпатии:
    47
    Есть таблица, в ней 3 поля
    Поле status заполнено числом 0
    Планируется заполнения 1-2-3
    Как добавлять что ли к 0 числа?
    Типа: 0+1
    в бд уже 1
    дальше 1+1
    2
    2+1
    3
    Типа так, как сделать? данных может и не быть в таблице, заполняю поля сам
    типо вот так
    $sql = mysql_query("INSERT INTO `real_status` (author_user,uid,status) VALUES ('$a','$b','$c+')");
     
  2. Stas-P

    Stas-P

    Регистр.:
    7 сен 2013
    Сообщения:
    165
    Симпатии:
    125
    у тебя заполнение как будет идти?
    сейчас это очень похоже на increment id.
    Опиши более подробно, как должно работать?
    То есть у тебя при вставки все статусы = 0 или как раз новая строчка статус = последнее значение + 1 ? Другими словами (increment)
     
  3. SocMaster

    SocMaster aka Hakerok

    Регистр.:
    26 июл 2011
    Сообщения:
    202
    Симпатии:
    47
    Пустая таблица, status по умолчанию равно 0
    Дальше мне нужно каждый раз прибавлять к status +1
    Делать новый запрос и узнавать какое там число в status не хочется...
     
  4. BDSG

    BDSG

    Регистр.:
    28 фев 2009
    Сообщения:
    203
    Симпатии:
    109
    а при удалении записи(ей) что будет со статусами?.. выравниваться (что бы подряд шли), или пофиг?..

    приведите схему таблицы (запрос для создания).
     
  5. SocMaster

    SocMaster aka Hakerok

    Регистр.:
    26 июл 2011
    Сообщения:
    202
    Симпатии:
    47
    Пока не думал над удалением, но так то пофиг
    Таблица с тремя полями author_user - текст,uid - номер,status - номер и все
     
  6. BDSG

    BDSG

    Регистр.:
    28 фев 2009
    Сообщения:
    203
    Симпатии:
    109
    вопрос я не просто так задал.. если вам просто последовательная нумерация нужна, поставьте поле в auto_increment (ALTER TABLE real_status MODIFY COLUMN status INTEGER NOT NULL AUTO_INCREMENT), и не обновляйте его при insert/update - само будет последовательно нумероваться..

    если же вам нужна иная логика (напр. выравнивание при удалении или ещё что), имеет смысл озвучить задачу полностью (с учетом планируемого объема таблицы, отношения чтения к вставкам/удалению и т.п.).. напр. можно обрабатывать запрос триггером..

    зы.. автоинкремент при удалении полей не выравнивается..
     
  7. SocMaster

    SocMaster aka Hakerok

    Регистр.:
    26 июл 2011
    Сообщения:
    202
    Симпатии:
    47
    Пишу небольшой скриптик, идея в том что юзер голосует, голос = 1
    создаю одно поле для каждого uid (номер юзера)
    Дальше при каждом голосовании нужно обновлять status у определенного uid, сейчас проверяю есть ли запись с таким uid, если нет создаю, если да не знаю что делать) спрашиваю потому у вас) есть вариант вытягивать status заранее потом уже суммировать с +1
     
  8. SocMaster

    SocMaster aka Hakerok

    Регистр.:
    26 июл 2011
    Сообщения:
    202
    Симпатии:
    47
    $p = mysql_query("SELECT status FROM real_status WHERE uid =".$uid."");
    $p = mysql_fetch_assoc($p);
    можно так сделать и потом суммировать
    Но подозреваю что это не самый лучший вариант, все таки + запрос
     
  9. BDSG

    BDSG

    Регистр.:
    28 фев 2009
    Сообщения:
    203
    Симпатии:
    109
    а..
    UPDATE real_status SET status = status + 1 WHERE uid = 123;
     
    SocMaster нравится это.
  10. SocMaster

    SocMaster aka Hakerok

    Регистр.:
    26 июл 2011
    Сообщения:
    202
    Симпатии:
    47
    Как все просто...
    Не подскажите где тут ошибка (подозреваю что вся конструкция сплошная ошибка :D)
    PHP:
    mysql_query("IF EXISTS SELECT verify6 FROM ".DB::table('common_member_verify')." WHERE uid =".$uid."
    THEN
    UPDATE `pre_common_member_verify` SET verify6='1' WHERE uid ="
    .$uid."
    ELSE
    INSERT INTO `pre_common_member_verify` (`uid`, `verify1`, `verify2`, `verify3`, `verify4`, `verify5`, `verify6`, `verify7`) VALUES
    (
    $uid, 0, 0, 0, 0, 0, 1, 0) WHERE uid =".$uid."");