Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.06.2014, 00:23   #1
DimaNIKul
Пользователь
 
Регистрация: 02.02.2013
Сообщений: 17
По умолчанию Сделать select перед update

Доброго времени суток всем, у меня не получается получить ид из таблицы, для дальнейшего обновления, помогите пожалуйста, вот запрос
Код:
UPDATE users as t1,
 (SELECT t2.id FROM users AS t2 ORDER t2.id ASC LIMIT 1) as t3 
SET t1.referal_summa=SELECT ((select sum(summa_den*0.1) from users where uroven2=t3.id) + 
(select sum(summa_den*0.03) from users where uroven2=t3.id) + 
(select sum(summa_den*0.01) from users where uroven3=t3.id) + (select sum(summa_den*0.01)
 from users where uroven4=t3.id)
 );

Последний раз редактировалось Stilet; 18.06.2014 в 08:06.
DimaNIKul вне форума Ответить с цитированием
Старый 18.06.2014, 08:12   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Код:
UPDATE users
SET referal_summa=(
  select 
   sum(summa_den*0.1)+
   sum(summa_den*0.03)+
   sum(summa_den*0.01)+
   sum(summa_den*0.01)
  from users where uroven2=(SELECT id FROM users ORDER id ASC LIMIT 1)
);
Не?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 18.06.2014, 18:30   #3
DimaNIKul
Пользователь
 
Регистрация: 02.02.2013
Сообщений: 17
По умолчанию

Не, там надо умножать в зависимости от того где находиться ид пользователя, допустим для уровня 1 (uroven1) это 0.1, для 2 уровня 0.3, для 3 и 4 уровня это 0.1
DimaNIKul вне форума Ответить с цитированием
Старый 18.06.2014, 19:35   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Значит вместо
Цитата:
sum(summa_den*0.1)
писать:
Код:
(select sum(summa_den*0.1) from users where uroven2=t3.id)
А t3 задать в главном запросе.

P.S. А можно узнать зачем такие расчеты? Что-то как-то не могу понять их смысл... Попахивает избыточностью.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 18.06.2014, 19:52   #5
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

про субд опять молчок... удалять такие темы безжалостно
eval вне форума Ответить с цитированием
Старый 18.06.2014, 19:58   #6
DimaNIKul
Пользователь
 
Регистрация: 02.02.2013
Сообщений: 17
По умолчанию

СУБД mysql, я как бы так уже пытался сделать, и мускул меня не понял, или я вас не понял?
ps: реферальная система это

Последний раз редактировалось DimaNIKul; 18.06.2014 в 20:00.
DimaNIKul вне форума Ответить с цитированием
Старый 18.06.2014, 20:19   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Код:
UPDATE users
SET referal_summa=(
  select 
   (select sum(summa_den*0.1)   from users where uroven1=u.id)+
   (select sum(summa_den*0.03) from users where uroven2=u.id)+
   (select sum(summa_den*0.01) from users where uroven3=u.id)+
  (select  sum(summa_den*0.01) from users where uroven4=u.id)
  from users u where uroven2=(SELECT id FROM users ORDER id ASC LIMIT 1)
);
Цитата:
реферальная система это
А поточнее. Какой смысл записывать сумму, если ее легко можно высчитать?
И зачем для уровней разные поля? Гораздо надежнее будет сделать таблицу-словарь уровней, и JOIN-ами к ней связываться, а у юзера поле код уровня.
Т.е. я не могу понять смысл такой структуры базы.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 18.06.2014, 20:29   #8
DimaNIKul
Пользователь
 
Регистрация: 02.02.2013
Сообщений: 17
По умолчанию

ваш запрос не работает, You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'id ASC LIMIT 1))' at line 8, версия мускула 5.5.25, даже если добавить забытое слово as в последнем запросе, структуру бд делал глубокой ночью и чет досих пор не придумаю как сделать лучше, если есть аська или скайп, можем пообщаться
DimaNIKul вне форума Ответить с цитированием
Старый 18.06.2014, 20:48   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Нет у меня ни того ни другого.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 18.06.2014, 20:52   #10
DimaNIKul
Пользователь
 
Регистрация: 02.02.2013
Сообщений: 17
По умолчанию

а что есть? и ещё варианты как сделать?
DimaNIKul вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перед тем как сделать ремонт Unmanner Компьютерное железо 6 14.01.2013 14:15
Написание процедур select, delete, update, insert (с выходным параметром) NatRez SQL, базы данных 4 21.10.2012 19:54
PHP Как сделать несколько update на странице Авторитет PHP 2 26.01.2012 00:28
Как сделать регистрацию и авторизацию пользователей перед входом в программу, БД. zorro БД в Delphi 18 28.08.2007 11:04