Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Сумирование Полей, Сумирование Полей Mysql 
:(
    Опции темы
Anakin
  Дата 28.10.2007, 15:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 192
Регистрация: 25.9.2006

Репутация: нет
Всего: нет



Здравствуйте уважаемые программисты.
Есть вопрос по поводу вычисление.
Обрисую ситуацию.
Есть две таблицы Table1 и table2
Структура таблиц такова.
Table1:
==============
ID | Field1 | Field3 |
==============
15  | Text1 | Text1 |
18  | Text2 | Text2 |
22  | Text3 | Text3 |
==============

Table2:

==============
ID | Field1 | Field3 |
==============
1   | Text1 | 25      |
2   | Text2 | 36      |
3   | Text3 | 43      |
==============

Так вот проблему. Мне необходимо суммировать данные из таблицы Table1.ID  с Table2.Field3 
Тоесть это будет выглядеть примерно так 15+36=51 и эта сумма 51 должна заменитса на 36 тоесть проста при плюсовать 15 к 36.

Допустим всё это происходит при нажатии на кнопку.
Если можна подскажите с использованием Query.

Люди добрые подскажите плизз.
PM MAIL   Вверх
pseud
Дата 29.10.2007, 10:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Экспёрт Тыдыщ
***


Профиль
Группа: Завсегдатай
Сообщений: 1175
Регистрация: 18.5.2007
Где: Минск, Беларусь

Репутация: 16
Всего: 40



а почему именно 15+36=51
а не 15 + 25 или 15 +43
конкретизируй задачу:
"надо ID первой строчки из т1 приплюсовать к Field3 2й строчки в т2"
или
"все ID т1 при плюсовать ко всем Field3 т2"


--------------------
Испытание чужого терпения можно считать успешным, если оно лопнуло...
PM MAIL   Вверх
Anakin
  Дата 29.10.2007, 20:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 192
Регистрация: 25.9.2006

Репутация: нет
Всего: нет



Цитата

конкретизируй задачу:
"надо ID первой строчки из т1 приплюсовать к Field3 2й строчки в т2"

Да именно так.
Без разницы можна и так 
Цитата

а не 15 + 25 или 15 +43


Я имел ввиду что мне необходимо суммировать не все поля а имеено по выбору.
Я пишу что ты вроде игры и когда там чел отвечает правильно на вопрос ему плюсуются очки. А у каждого вопроса есть свои выигрышные очки.
Вроде всё описал )
Кто знает как это реализовать.
ДА кстате использую Сервер Mysql ver. 5.x 
И компоненты для связи с Mysql я использую MyDAC.
Спасибо за рание..
PM MAIL   Вверх
Anakin
Дата 29.10.2007, 22:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 192
Регистрация: 25.9.2006

Репутация: нет
Всего: нет



Я думал сделать что то вроде такого
Пишу прямо в Браузере так что могут быть ошибки.

Код

query.close;
Query.Clear;
Query.SQL.Add('Select ID From Table1 Where ID:=Prm1 UNION Select Field3 From Table2 Where Field3:=Prm2');
Query.Open;



Вот вроде так но могут быть ошибки.
Поправте если я чтото не так написал.

Это сообщение отредактировал(а) Anakin - 29.10.2007, 22:19
PM MAIL   Вверх
Vas
Дата 30.10.2007, 07:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 830
Регистрация: 29.6.2005
Где: Stavropol region

Репутация: 23
Всего: 28



Да в принципе прально только иэ этого запроса нужно выбрать еще и сумму, не знаю мускуль поддерживает вложенные запросы, но приблизительно будет так:
Код

select sum(fff) from (Select ID as fff From Table1 Where ID:=Prm1 UNION Select Field3 as fff From Table2 Where Field3:=Prm2)



--------------------
И опыт, сын ошибок трудных, И гений, парадоксов друг, И случай, бог изобретатель. ... (А.С. Пушкин)
PM MAIL   Вверх
Anakin
Дата 30.10.2007, 08:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 192
Регистрация: 25.9.2006

Репутация: нет
Всего: нет



Да наскока я знаю он помоему поддерживает. )
Шас буду пробывать ) Спасибо за подсказку )
PM MAIL   Вверх
Anakin
Дата 1.11.2007, 16:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 192
Регистрация: 25.9.2006

Репутация: нет
Всего: нет



Да но шас возник встречный вопрос.
Шас опишу.

Ниже код кнопки котопки при нажатии которой заполняетса COmbobox

Код

procedure TfrmOtvet.spbAskClick(Sender: TObject);
begin
  MainForm.maccess.Close;
  MainForm.maccess.SQL.Clear;
  MainForm.maccess.SQL.Add('SELECT ID,ntask FROM ttask;');
  MainForm.maccess.Open;
  cb_otvet.Clear;
  while not MainForm.maccess.Eof do
  begin
   cb_otvet.Items.AddObject(MainForm.maccess.Fields.Fields[1].AsString, Pointer(MainForm.maccess.Fields.Fields[0].AsInteger));
    MainForm.maccess.Next;
end;




а вот код ниже на собитии Combobox`a (OnChange)

Код

procedure TfrmOtvet.cb_otvetChange(Sender: TObject);
begin
  MainForm.maccess.Close;
  MainForm.maccess.SQL.Clear;
  MainForm.maccess.SQL.Add('SELECT ID,ntask,task,executed,ball FROM ttask WHERE (ID=:Prm);');
  MainForm.maccess.Params.ParamByName('Prm').Value:=IntToStr(integer(cb_otvet.Items.Objects[cb_otvet.ItemIndex]));
  MainForm.maccess.Open;
  If mainform.maccess.Fields.Fields[3].AsBoolean=true then
  Begin
  MainForm.Ttask.Active:=False;
  spb_apply.Enabled:=False;
  et_otvet.Enabled:=False;
  end
else
  Begin
  MainForm.Ttask.Active:=True;
  spb_apply.Enabled:=True;
  et_otvet.Enabled:=True;
  end;
end;



Казалось бы всё супер но есть одно жирное НО
Необходимо сделать так что бы при выполнений этого задания больше никто не смог взять это задание.
Выше в коде я описываю поле executed которое имеет своиство True , False
Но у меня проблема так как я незнаю как сделать так что бы при нажатии на кнопку ответить на задание поле Executed присваивалось True
Ведь я выше делаю так:

Код

  MainForm.maccess.Close;
  MainForm.maccess.SQL.Clear;
  MainForm.maccess.SQL.Add('SELECT ID,ntask,task,executed,ball FROM ttask WHERE (ID=:Prm);');
  MainForm.maccess.Params.ParamByName('Prm').Value:=IntToStr(integer(cb_otvet.Items.Objects[cb_otvet.ItemIndex]));
  MainForm.maccess.Open;



И туда я не могу вставить UPDATE сразу.
Кароче как мне присвоить допустим кнопке spb_apply команду на UPDATE поля executed=true
у меня кароче всегда получается так что оно даёт всем заданиям значение True а мне необходимо тока выбранному заданию.
Я даже пробовал прибегать в Ttable вот код кнопки с использованием компонента ttable

Код

procedure Tfrmtask.spb_applyClick(Sender: TObject);
begin
  MainForm.Ttask.Active:=True;
  MainForm.tusers.Active:=True;
  MainForm.maccess.Close;
  MainForm.maccess.SQL.Clear;
  MainForm.maccess.SQL.Add('SELECT ttask.ntask, ttask.Otvet, ttask.executed FROM ttask');
  MainForm.maccess.SQL.Add('WHERE ((ttask.ntask=:Prm1)and(ttask.otvet=:Prm2));');
  MainForm.maccess.Params.ParamByName('Prm1').Value:=et_Name.Text;
  MainForm.maccess.Params.ParamByName('Prm2').Value:=et_otvet.Text;
  MainForm.maccess.Open;
  if(MainForm.maccess.Fields.Fields[1].AsString=et_otvet.Text)then
  Begin
  MainForm.Ttask.Active:=true;
  MainForm.Ttask.Edit;
  mainForm.Ttask.FieldbyName('EXECUTED').AsBoolean:=True;
  MainForm.Ttask.Post;
  lbl_StatusOtvet.Caption:='Îòâåò âåðåí..';
  spb_apply.Enabled:=False;
  end
  else
  begin
  lbl_StatusOtvet.Caption:='Îòâåò íå âåðåí..';
  end;
end;



но этот код присваивал значение True только первой записи. (
Помогите плизз (
PM MAIL   Вверх
Vas
Дата 1.11.2007, 16:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 830
Регистрация: 29.6.2005
Где: Stavropol region

Репутация: 23
Всего: 28



Кстати один топик один вопрос!!!

Блин, чего-то я ниче не понял. Кто мешает на onChange ComboBox (или какой-то там кнопки) выполнить запрос сначала на update выбранной записи. 
То бишь выбираем задание, жмем Ок, при нажатии на Ок сделать Update, а потом пустить человека в выполнение задания. Соотвественно при загрузке бокса читать только задания, которые со статусом не заняты. 
Сложного ничего абсолютно при правильной реализации. Кстати про блокировки не забываем и проверкой при update никто ли еще не изменил эту запись. А то человек откроет окно выбора задания, бокс загрузится и свалит на пол часа курить, придет выберет задание и вперед, а оказывается за это время уже это задание забрали.


--------------------
И опыт, сын ошибок трудных, И гений, парадоксов друг, И случай, бог изобретатель. ... (А.С. Пушкин)
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

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


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »


 




[ Время генерации скрипта: 0.0477 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.