Я увеличиваю числовое значение, если есть такая же запись, или вставка хочет сделать 0, если нет - PullRequest
0 голосов
/ 27 мая 2009

Пожалуйста, помогите мне.

select * from hoge where id=xxx; 

Если есть данные, я делаю это, чтобы сделать это, но, хотя я и реализую этот шаг, есть ли в программе, и вставка данных hoge set = 0 хлопотно, если обновление данных hoge set = data + 1, a результат 0 строк.

Не можете ли вы реализовать эту процедуру ударом по SQL? замените hoge, выберите id, data + 1 как данные из hoge, где id = x; Когда это был SQL, результат не мог быть использован, потому что данные не вводились в случае NULL.

В конце концов, не будет ли это множественного числа или гребня SQL в предложении if? Если есть более простой метод, пожалуйста, научите его.

Люди, заранее благодарим вас.

Ответы [ 2 ]

3 голосов
/ 27 мая 2009

Если я правильно понимаю вопрос (я не думаю, что OP является носителем английского языка), вы можете использовать ON DUPLICATE KEY для этого в MySQL.

INSERT INTO table 
  (column1, column2, ...)
VALUES
  ('initial value for column1', 'initial value for column2', ...)
ON DUPLICATE KEY UPDATE
  column1 = column1 + 1, column2 = 'new value for column2';
0 голосов
/ 27 мая 2009

Вы, похоже, спрашиваете, как создать строку, если она еще не существует, или, если она существует, обновить одно из полей в ней.

Обычный подход (для СУБД, которые не предоставляют какую-либо форму оператора UPSERT):

insert into TBL(keycol,countcol) values (key,-1)
update TBL set countcol = countcol + 1 where keycol = key

Вам необходимо игнорировать любые ошибки в первой строке (что должно произойти, если строка уже существует). Затем второе утверждение обновит его.

Также необычно изначально вставлять нулевую запись, так как вы обычно добавляете одну «вещь» в первый раз, когда делаете это. В этом случае вставка установит значение 0, а не -1. ​​

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...