powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помогите создать простои запрос UPDATE
14 сообщений из 14, страница 1 из 1
Помогите создать простои запрос UPDATE
    #39363560
Deus_2016
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Суть в чем есть таблица с аккаунтами в ней есть очки пользователя.
Нужен такои запрос Например. Пользователь Ваня тратит очки в размере 20. У него всего 19.
Как за один запрос вернуть сколько очков списано с Update вместе. т.е. еслиб у него было 50 очков. результат бы вернул 0 и обновилась бы запись на 30. А так он списывает больше чем у него есть обновление не происходит и возвращает ему 20 назад т.е. нечего не списано. и не обновлено. можно это как то за один запрос сделать в таблице 80к записеи

сервер 10.1.18-MariaDB processor i7 4770/ 64г оперетивная память

драивер ODBC Java приложение.
...
Рейтинг: 0 / 0
Помогите создать простои запрос UPDATE
    #39363709
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЯНХНП.
...
Рейтинг: 0 / 0
Помогите создать простои запрос UPDATE
    #39363752
Deus_2016
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Думал тут умнее люди сидят
...
Рейтинг: 0 / 0
Помогите создать простои запрос UPDATE
    #39363864
Deus_2016
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мож кому пригодится сам еле разобрался с этими функциями.

Хотя мож кто подскажет как оптимизировать запрос?

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
BEGIN
  DECLARE acct_donate INT(7);
  DECLARE acct_donateD INT(7);
    SELECT donate INTO acct_donate FROM `accounts` WHERE login = name;
    IF acct_donate >= donatescore THEN
      UPDATE `accounts` SET `donate` = `donate` - donatescore WHERE `login` = name;
      SELECT donate INTO acct_donateD FROM `accounts` WHERE login = name;
      IF (acct_donate - acct_donateD) = donatescore THEN
        RETURN 0;
      ELSE
        RETURN acct_donate;
      END IF;
    ELSE
      RETURN donatescore;
    END IF;
END
...
Рейтинг: 0 / 0
Помогите создать простои запрос UPDATE
    #39363866
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Невменяемые условия (и неважно, от непонимания задачи или от неспособности её объяснить) порождают дикие решения.
ЭТО надо не оптимизировать, а удалить и написать с нуля.
...
Рейтинг: 0 / 0
Помогите создать простои запрос UPDATE
    #39363875
Deus_2016
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
я так в любои теме могу написать. Покажите на что вы способны? или только языком молоть?!
...
Рейтинг: 0 / 0
Помогите создать простои запрос UPDATE
    #39363913
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Deus_2016Покажите на что вы способны?13 тысяч сообщений и неоднократные благодарности от тех, чьи вопросы были решены. Это только на этом форуме.
А теперь покажите, на что ВЫ способны. Сформулируйте проблему так, чтобы её можно было понять и не сломать при этом мозг.
...
Рейтинг: 0 / 0
Помогите создать простои запрос UPDATE
    #39363918
Deus_2016
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Т.е. Вы с 13000+ сообщениями ломаете мозг от 1 переменной? что вы тогда тут делаете? Разжую в 2х словах.

Обновить одно поле и вернуть данные в зависимости от результата.

Так понятнее? Или сейчас опять будет куча нытья? если да, то просто не отвечайте. Я уже и так сыт вашими объемными ответами
...
Рейтинг: 0 / 0
Помогите создать простои запрос UPDATE
    #39363940
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Deus_2016Обновить одно поле и вернуть данные в зависимости от результата.Возможно, поможет функция LAST_INSERT_ID().
Хотя не уверен, т.к. я тоже толком не понял задачу.

Покажите DDL таблицы, пример исходных данных и желаемый результат.
...
Рейтинг: 0 / 0
Помогите создать простои запрос UPDATE
    #39363955
Deus_2016
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoft,

Ок, Я принципи написал что выше как можно проще в первом посте.
Это отдельный модуль который должен вернуть значение 0 если в таблице обновилась запись и d >= 0

Например
a = 1000;
b = 10000;

Код: sql
1.
SELECT d FROM `accounts` WHERE `login` LIKE 'Deus'


d = 1789.
мне надо списать a из d;
чтоб d >= 0
Спишем
Код: sql
1.
UPDATE `accounts` SET `d` =  `d` - a WHERE `login` LIKE 'Deus'


d = 789;

так вот после Update. Если все прошло успешно Ответ должен быть 0.
если
Спишем
Код: sql
1.
UPDATE `accounts` SET `d` =  `d` - b WHERE `login` LIKE 'Deus'


d = -8211;
так вот после Update. Если все прошло не успешно и d =< 0. Тогда вернуть b;

Не хочу нагромождать вас не нужной информацией в итоге должно получиться чтоб я знал при ответе что 0 это прошло все успешно и Число которое было на входе если пришло назад значит успешно не прошло. Успешно не прошло из-за того что не хватило очков.

Не знаю как еще лучше описать тут всего 1 переменная очки d. и все.
...
Рейтинг: 0 / 0
Помогите создать простои запрос UPDATE
    #39363960
Deus_2016
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoft,

Просто спрашиваю оптимальный запрос тут на форуме. Потому как думаю что тут люди в большеи степени занимаются эти вопросами. а у меня нет много времени на оптимизацию. я выше написал пример того как я сделал но там ошибка маленькая в одном месте я -1 возращаю. если после упдате числа не совпадают. Этот запрос работает но я думаю не эффективно.
...
Рейтинг: 0 / 0
Помогите создать простои запрос UPDATE
    #39363994
Deus_2016
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Deus_2016miksoft,
d = 789;

так вот после Update. Если все прошло успешно Ответ должен быть 0.
если
Спишем
Код: sql
1.
UPDATE `accounts` SET `d` =  `d` - b WHERE `login` LIKE 'Deus'


d = -8211;
так вот после Update. Если все прошло не успешно и d =< 0. Тогда вернуть b;


Еще забыл в этом случае не должно вообще обновиться поле т.е. не должно быть меньше нуля.
похоже на функцию если проще написать без языка.
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
count = 1000;
a1 = 100;

count_ = selectread(count);

if(count_ >= a1)
{
  update(count - a1);
  return 0;
}else
{
  return a1;
}
...
Рейтинг: 0 / 0
Помогите создать простои запрос UPDATE
    #39364039
Var79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Deus_2016Думал тут умнее люди сидят
19985342
малолетний недоманипулятор
...
Рейтинг: 0 / 0
Помогите создать простои запрос UPDATE
    #39364067
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Deus_2016похоже на функциюСобственно, можно и написать свою функцию. А для возврата a1 использовать переменную или LAST_INSERT_ID() с параметром.

Или как-то так:
Код: sql
1.
2.
3.
UPDATE accounts
SET d = CASE WHEN d >= 100 THEN d-100+LAST_INSERT_ID(0) ELSE d-100+LAST_INSERT_ID(100) END
WHERE `login` LIKE 'Deus'

Вместо 100 подставить то число, которую нужно вычесть.
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помогите создать простои запрос UPDATE
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]