powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Можно ли без создания временной таблици успешно выполнить запрос? Если да -- то как?
20 сообщений из 20, страница 1 из 1
Можно ли без создания временной таблици успешно выполнить запрос? Если да -- то как?
    #38651094
XMystic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
UPDATE users_list
SET sum1 = sum1 +
(
SELECT SUM(sum1)
FROM users_list
WHERE user_name
IN ( SELECT user_login FROM users_list)
)*x


Ошибка:
You can't specify target table 'users_list' for update in FROM clause
...
Рейтинг: 0 / 0
Можно ли без создания временной таблици успешно выполнить запрос? Если да -- то как?
    #38651145
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Запрос какой-то бессмысленный...

И если нужен именно такой запрос, то промежуточная таблица не нужна, достаточно одной переменной.
...
Рейтинг: 0 / 0
Можно ли без создания временной таблици успешно выполнить запрос? Если да -- то как?
    #38651193
Фотография javajdbc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
XMystic,

почитайте про многотабличныый апдейт.
Т.е. вроде можно сделать типа промежуточной таблицы на лету

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
update 
  A 
  join  (select ......создайте промежуточную таблица прямо здесь............)  as B
set 
  A.f1 = A.f1 + B.z1,
  A.f2 = A.f2 + B.z2
where
  .......условия связки.............
...
Рейтинг: 0 / 0
Можно ли без создания временной таблици успешно выполнить запрос? Если да -- то как?
    #38651242
XMystic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Понял. Спасибо :)
...
Рейтинг: 0 / 0
Можно ли без создания временной таблици успешно выполнить запрос? Если да -- то как?
    #38651244
Фотография javajdbc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
XMystic,

всегда пожалуйста, главное --- чтоб сработало.
...
Рейтинг: 0 / 0
Можно ли без создания временной таблици успешно выполнить запрос? Если да -- то как?
    #38651793
alex564657498765453
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoftЗапрос какой-то бессмысленный...

И если нужен именно такой запрос, то промежуточная таблица не нужна, достаточно одной переменной.

запрос не просто бесмысленый, а полная чушь

Код: sql
1.
update target set sum1 = (select sum(sum1) from target)



по русски ктото скажет что должно получиться???

PS
target = select * from origin_table where user_name IN (select user_login from origin_table)

тоесть у нас есть пересечение множества значений логинов и имём, и с этим подмножиством оригинальной таблицы мы работаем.

а что хотел просумировать профессор - загадка
...
Рейтинг: 0 / 0
Можно ли без создания временной таблици успешно выполнить запрос? Если да -- то как?
    #38652520
XMystic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пытаюсь понять, как делаются реферальные системы
Я так понимаю, там надо в каждой строке реферера добавить % реферала, при этом рефералов может быть как много, так и не быть вовсе...
...
Рейтинг: 0 / 0
Можно ли без создания временной таблици успешно выполнить запрос? Если да -- то как?
    #38652528
XMystic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кстате, чтобы не создавать новую тему (очень простые вопросы, но ответ в гугле ненашел)
Есть таблица, допустим table1
В ней есть поля user (логин пользователя, уникальное), ballance (сумма денег на счету)
Как ко всем пользователям в таблице Table1 к полю ballance добавить 10%.

Вроде работает такой запрос
UPDATE table1 SET ballance = ballance + ballance*10/100 WHERE user_login=user_login

Как убедится, что в ballance от одного пользователя не попадет ballance другого пользователя?
Надо ли как-то указывать, что данные надо брать именно из текущей строки?

И надо ли здесь условие WHERE? -- и без него вроде все работает, но страшновато как-то.
...
Рейтинг: 0 / 0
Можно ли без создания временной таблици успешно выполнить запрос? Если да -- то как?
    #38652537
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чтобы убедиться сделайте такой запрос
Код: sql
1.
Select balance, balance*1.1, user_login from Table1


Далее работает аналогично, только обновляет записи
Код: sql
1.
update table1 set balance = balance*1.1
...
Рейтинг: 0 / 0
Можно ли без создания временной таблици успешно выполнить запрос? Если да -- то как?
    #38652607
XMystic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alex_Ustinov, Спасибо )
Вроде работает.

Переделал первый запрос -- Ошибку не выдает, но и работает неверно, надо чтобы происходило начисление 10% реферальных (от суммы рефералов user_referer):

Есть таблица: users_list

user_sum -- Балланс пользователя
user_referer -- Реферер пользователя (равно логину пользователя, который пригласил, может быть пустым)
user_login -- Логин пользователя

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
UPDATE users_list
    SET user_sum =
        (user_sum +
            (
            SELECT SUM(user_sum)
            FROM
                (
                SELECT user_sum
                FROM users_list
                WHERE user_referer IN (SELECT user_login FROM users_list)
                )
            as tmp
            )
        *0.1)
    WHERE user_login=user_login



Проблемма в том, что сумма (временная таблица tmp) считается только 1 раз, а потом просто добавляется ко всем остальным строкам.
...
Рейтинг: 0 / 0
Можно ли без создания временной таблици успешно выполнить запрос? Если да -- то как?
    #38652729
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
XMystic
Код: sql
1.
WHERE user_login=user_login

ППЦ условие...
...
Рейтинг: 0 / 0
Можно ли без создания временной таблици успешно выполнить запрос? Если да -- то как?
    #38652978
alex564657498765453
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
XMysticКстате, чтобы не создавать новую тему (очень простые вопросы, но ответ в гугле ненашел)
Есть таблица, допустим table1
В ней есть поля user (логин пользователя, уникальное), ballance (сумма денег на счету)
Как ко всем пользователям в таблице Table1 к полю ballance добавить 10%.

Вроде работает такой запрос
UPDATE table1 SET ballance = ballance + ballance*10/100 WHERE user_login=user_login

Как убедится, что в ballance от одного пользователя не попадет ballance другого пользователя?
Надо ли как-то указывать, что данные надо брать именно из текущей строки?

И надо ли здесь условие WHERE? -- и без него вроде все работает, но страшновато как-то.

чувак...теперь уже мне страшно. я уже молчу про знания математики (а+а*10/100) = а*1.1

но с такими знаниями мускла...

скажи что за систему ты поддерживаешь...хочу знать куда не стоит вкладывать деньги.

ЗЫ
а серьёзно - тебе язык надо учить баз данных - это один два дня времени(никто не говорит идеально всё, основы) - чтобы либо знал как сделать, либо точно понимал, что ты знаешь а чего нет и надо прочитать в доках... а то точно юзеры без денег остануться
...
Рейтинг: 0 / 0
Можно ли без создания временной таблици успешно выполнить запрос? Если да -- то как?
    #38652989
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex564657498765453а то точно юзеры без денег останутьсявангую, что не "без денег", а "без некой игровой валюты"
...
Рейтинг: 0 / 0
Можно ли без создания временной таблици успешно выполнить запрос? Если да -- то как?
    #38653915
XMystic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alex564657498765453XMysticКстате, чтобы не создавать новую тему (очень простые вопросы, но ответ в гугле ненашел)
Есть таблица, допустим table1
В ней есть поля user (логин пользователя, уникальное), ballance (сумма денег на счету)
Как ко всем пользователям в таблице Table1 к полю ballance добавить 10%.

Вроде работает такой запрос
UPDATE table1 SET ballance = ballance + ballance*10/100 WHERE user_login=user_login

Как убедится, что в ballance от одного пользователя не попадет ballance другого пользователя?
Надо ли как-то указывать, что данные надо брать именно из текущей строки?

И надо ли здесь условие WHERE? -- и без него вроде все работает, но страшновато как-то.

чувак...теперь уже мне страшно. я уже молчу про знания математики (а+а*10/100) = а*1.1

но с такими знаниями мускла...

скажи что за систему ты поддерживаешь...хочу знать куда не стоит вкладывать деньги.

ЗЫ
а серьёзно - тебе язык надо учить баз данных - это один два дня времени(никто не говорит идеально всё, основы) - чтобы либо знал как сделать, либо точно понимал, что ты знаешь а чего нет и надо прочитать в доках... а то точно юзеры без денег остануться

Ну... с математикой надо может быть и подружится, хотя, по поводу (а+а*10/100) = а*1.1 -- там вместо 10 задумана переменная из PHP, так что делить, мне кажется всеравно прийдется...

Никакую систему, я пока что не поддерживаю, просто изучаю PHP и MySQL, но в будующем все может быть...

Ну... Раз надо учить язык, значит буду учить... Книжечку не подскажешь? -- Только не 3х томник какой-то )))

п.с. Вопрос решил путем разбиения на 2 запроса и цикла while в PHP. Всем спасибо. )))
...
Рейтинг: 0 / 0
Можно ли без создания временной таблици успешно выполнить запрос? Если да -- то как?
    #38653988
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
XMysticпутем разбиения на 2 запроса и цикла while в PHP
...
Рейтинг: 0 / 0
Можно ли без создания временной таблици успешно выполнить запрос? Если да -- то как?
    #38654294
alex564657498765453
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ТОВАРИЩИ, раз уж зашол разговор про многотабличный апдейт

у меня была ситуация(и нивкакую не работало)

Users(iduser,...)

balance(idbalance,money,last) - idbalance=iduser для каждого юзера, моней - текущий баланс, ласт - время последнего списание средств

(типо билинг начал делать)

+
Files(idfile,size,fk_iduser,ctime,....) первичный ключ,размер,ссылка на владельца,время создания

ИТАК
перед запуском билинга, надо инициализировать стартовую ситуацию, пощитать сколько накаполо денег пока билинга небыло.

ДЕЛАЮ
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
#fill balance

INSERT INTO balance
 SELECT iduser,0,'1971-01-01 00:00:00'
 FROM users;

#@tax -  $/seconds/bytes. so if file size is 10 byte, and it stored 20seconds - it cost @tax*10*20
#@iNow = CURENT_TIMESTAMP()
#get (iduser,add_balance)

SELECT t.iduser,IF(t.total,t.total,0) as 'add_money'

FROM
 (
                     select b.idbalance as 'iduser',
                     @tax*IF(f.size,f.size,0)*TIMESTAMPDIFF(seconds,@iNow,GREATEST(f.ctime,b.last)) as 'total'

                     FROM
                     balance b left join files f on(f.fk_iduser  =b.idbalance)
                     ) t
GROUP BY t.iduser


писал по памяти что я делал, может где ошибся, но логика была такой, и выдавало правильную выборку.

пытался обновлять баланс
по типу
update t1 join t2 on(t1.id = t2.id)
set t1.balance = t1.balance + t2.add_money

у меня всегда совпадение первичного ключа, поэтому всегда будет апдейт, к текущему балансу дорисовать
отрицательное число
но оно постаянно ругалось на то что в подзапросе нельзя использовать баланс-таблицу.
как я не пытался на лету формировать ...всёравно упорно не хотело
сработало только по типу
INSERT INTO ... ON DUPLICATE KEY UPDATE

почему так и не понял.

может ктото привести пример апдейта из джоина, таблицы и ПОДЗАПРОСА(от этой же таблицы и какойто другой) и чтобы оно не ругалось. у меня не получилось на лету создать временую таблицу.
ТРИГЕРОВ на изменяемую таблицу баланса нету.
...
Рейтинг: 0 / 0
Можно ли без создания временной таблици успешно выполнить запрос? Если да -- то как?
    #38654318
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все зависит от объемов конечно, как вариант для мелких таблиц
Код: sql
1.
 ... FROM table1 as t1, (SELECT * from table1) as t2 ...
...
Рейтинг: 0 / 0
Можно ли без создания временной таблици успешно выполнить запрос? Если да -- то как?
    #38654320
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да, повторился, javajdbc выше об этом же
...
Рейтинг: 0 / 0
Можно ли без создания временной таблици успешно выполнить запрос? Если да -- то как?
    #38654390
alex564657498765453
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex_UstinovВсе зависит от объемов конечно, как вариант для мелких таблиц
Код: sql
1.
 ... FROM table1 as t1, (SELECT * from table1) as t2 ...



:) мелкая, система разрабатываеться, для тестов там около 18 юзер, соответсвено 18 балансов в таблице балансы
...
Рейтинг: 0 / 0
Можно ли без создания временной таблици успешно выполнить запрос? Если да -- то как?
    #38654688
Cygapb-007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex564657498765453 ,

http://sqlfiddle.com/#!2/621ba/1
...
Рейтинг: 0 / 0
20 сообщений из 20, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Можно ли без создания временной таблици успешно выполнить запрос? Если да -- то как?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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