Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Группировка записей в НД 
:(
    Опции темы
JS2
Дата 22.10.2009, 10:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



SELECT'ом формирую НД. Получается, к примеру:

item_id | group_id
------------------
2                16
5                16
6                16
17              16
21              22
22              22
36              7 
74              7 

P.S. ORDER BY group_id 

Нужно сделать следующие: пройти по всему набору группируя в сроку Item_id с 
одинаковыми group_id + вывод, т.е. для данного примера должно быть так:

1 - ShowMessage -> 2,5,6,17
2 - ShowMessage -> 21,22
3 - ShowMessage -> 36,74

Как бы это написать алгоритм пограмотнее?
PM MAIL   Вверх
Akella
Дата 22.10.2009, 10:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

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



Цитата(JS2 @  22.10.2009,  10:03 Найти цитируемый пост)
группируя в сроку Item_id с 
одинаковыми group_id 

может суммируя?
PM MAIL   Вверх
JS2
Дата 22.10.2009, 10:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



нужно именно через ",". В последующем эта строка (Str) будет подставлятся в запрос: 

SELECT ... WHERE item_id in (Str) ...
PM MAIL   Вверх
Akella
Дата 22.10.2009, 10:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

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



Код
select sum(Item_id), group_id from table1 group by group_id


Добавлено через 42 секунды
Цитата(JS2 @  22.10.2009,  10:29 Найти цитируемый пост)
нужно именно через ",".

аааа, тогда запросом здесь не обойтись.

Добавлено через 1 минуту и 12 секунд
А почему ты не хочешь пройтись циклом по записям НД и собрать всё в одну строку?
PM MAIL   Вверх
JS2
Дата 22.10.2009, 10:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(Akella @ 22.10.2009,  10:31)



Сейчас у меня так и сделано. Вот как-то так:

Код

procedure Tform_Main.Button1Click(Sender: TObject);
var
  ItemIds: string;
  GroupID: Integer;
  field_group_id, field_item_id: TField;
begin
  with DMConnection do
  begin
    field_group_id := query_ByField.FieldByName('group_id');
    field_item_id := query_ByField.FieldByName('item_id');

    query_ByField.First;
    GroupID := field_group_id.AsInteger;
    ItemIds := '';

    while not query_ByField.Eof do
    begin
      if field_group_id.AsInteger = GroupID then
        ItemIds := ItemIds + ', '
      else
      begin
        ShowMessage(ItemIds);
        ItemIds := '';
      end;
      ItemIds := ItemIds + field_item_id.AsString;
      GroupId := field_group_id.AsInteger;

      if ItemIds[1] = ',' then
        Delete(ItemIds, 1, 1);

      query_ByField.Next;
    end;
    ShowMessage(ItemIds);
  end;
end;


Посмотрите. Возможно есть упущения.
PM MAIL   Вверх
Данкинг
Дата 22.10.2009, 10:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

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



Примерно так:
Код

var mes,cv:string;
i:integer;
begin
mes:='';
Query.First;
cv:=query.fieldvalues['group_id'];
for i:=1 to query.recordcount do
 begin
  if query.fieldvalues['group_id']<>cv then
   begin
    Showmessage(mes);
    mes:=query.fieldvalues['item_id']+',';
    cv:=query.fieldvalues['group_id']
  else
   mes:=query.fieldvalues['item_id']+',';
  end;
 Query.next;  

 end;
end;




Это сообщение отредактировал(а) Данкинг - 22.10.2009, 10:39


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
Akella
Дата 22.10.2009, 10:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

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



Что знач посмотрите? Нам оно не нужно, это ты посмотри... Код работает? Правильно работает? Так как хотелось бы? Или код возвращает неверные результаты?
PM MAIL   Вверх
ТоляМБА
Дата 22.10.2009, 11:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Котэ
***


Профиль
Группа: Завсегдатай
Сообщений: 1607
Регистрация: 15.12.2004

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



JS2, немешало бы указать, какая это СУБД, ибо в MySQL это можно и одним запросом получить.

Цитата(JS2 @  22.10.2009,  13:29 Найти цитируемый пост)
В последующем эта строка (Str) будет подставлятся в запрос: SELECT ... WHERE item_id in (Str) ...
А зачем именно через IN? Можно же через Inner Join сделать связь, тогда и перечисления через запятую не понадобятся. Просто надо увидеть оба запроса.
PM   Вверх
JS2
Дата 22.10.2009, 11:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Код

'SELECT * FROM Item WHERE (:FieldName = :FieldValue) AND (flags <> 1) ORDER BY group_id';


Код

'UPDATE group_%d SET :FieldName = :FieldValue WHERE item_id in (:ItemIds)';


Для обоих запросов FieldName и FieldValue одинаковы. 
group_%d - сюда передается group_id к которому относятся ItemIds.

СУБД MS SQL

Это сообщение отредактировал(а) JS2 - 22.10.2009, 11:28
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.0555 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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