Компьютерный форум NoWa.cc Здесь может быть Ваша реклама
Правила Форума
редакция от 22.06.2020
Форум .::NoWa.cc::.
Вернуться   Компьютерный форум NoWa.cc > В помощь вебмастеру > Программирование > Delphi

Уважаемые пользователи nowa.cc. Мы работаем для вас более 20 лет и сейчас вынуждены просить о финансовой помощи по оплате за сервер.
Окажите посильную поддержку, мы очень надеемся на вас. Реквизиты для переводов ниже.
Webmoney Webmoney WMZ: Z021474945171 Webmoney WME: E159284508897 Webmoney WMUSDT: T206853643180
Кошелёк для вашей помощи YooMoney 4100117770549562
YooMoney Спасибо за поддержку!

Ответ
 
Опции темы Опции просмотра Language
Старый 16.02.2010, 16:37   #1
Старожил
 
Аватар для hack
 
Пол:Мужской
Регистрация: 27.05.2005
Адрес: Тверь (Первомайка)
Сообщений: 1,929
Репутация: 3260
Question Как сосчитать одинаковые записи в БД.

Вот собственно вопрос - имеется БД (mdb). Мордочку написал на Delphi, коннект через ADO. В базе куча полей, адресная часть периодически повторяется - Улица-Номер дома-Корпус. Мне нужно сосчитать записи, совпадающие по этим трем полям и полученные значения забить в определенное поле (это не проблема). Третий день ломаю голову как осуществить, на данный момент пробую так:
  • Перехожу к первой записи.
  • Считываю все три поля в переменную_1.
  • Перехожу к Следующей записи.
  • Снова считываю три поля в переменную_2.
  • Сравниваю строки.
  • Если совпали, то увеличиваю переменную_3 на 1 и перехожу к следующей записи.
  • Если не совпали, просто перехожу к следующей записи.
  • Записываю переменную_3 в соответствующее поле.
  • По достижении последней записи перехожу ко второй записи и гоню все заново.
Вроде все работает, но как сделать, что бы не считать запись с которой провожу сравнение, а то все значения получаются на 1 больше.
Заранее спасибо.
__________________
У победы много отцов, поражение всегда сирота.

Последний раз редактировалось hack; 16.02.2010 в 17:42..
hack вне форума
 
Ответить с цитированием Вверх
Здесь может быть Ваша реклама
Здесь может быть Ваша реклама


Реклама: методы отбеливания зубов в стоматологиисидения для стульев кухонныхбарнхаус цена под ключ москвакупить стулья малайзия в москвеИнтегрируй приложения вместе с Альбато: Wazzup Viber - синхронизация за 5 минут!


Старый 16.02.2010, 17:22   #2
timid_wolf
Неактивный пользователь
 
Пол:Мужской
Регистрация: 10.02.2010
Сообщений: 1
Репутация: 0
По умолчанию Re: Как сосчитать одинаковые записи в БД.

что-то я не понял.

а почему группировкой нельзя выбрать все в самой базе?
или в аксесе нет group by?
timid_wolf вне форума
 
Ответить с цитированием Вверх
Старый 16.02.2010, 17:41   #3
hack
Старожил
 
Аватар для hack
 
Пол:Мужской
Регистрация: 27.05.2005
Адрес: Тверь (Первомайка)
Сообщений: 1,929
Репутация: 3260
По умолчанию Re: Как сосчитать одинаковые записи в БД.

Цитата:
Сообщение от timid_wolf Посмотреть сообщение
а почему группировкой нельзя выбрать все в самой базе? или в аксесе нет group by?

Я же написал:
Цитата:
Сообщение от hack Посмотреть сообщение
Мордочку написал на Delphi

т.е. Работаю через самописную прогу, т.к. Access ненавижу с детства .
__________________
У победы много отцов, поражение всегда сирота.
hack вне форума
 
Ответить с цитированием Вверх
Старый 16.02.2010, 17:48   #4
vidik
Пользователь
 
Аватар для vidik
 
Пол:Мужской
Регистрация: 20.05.2006
Сообщений: 51
Репутация: 157
По умолчанию Re: Как сосчитать одинаковые записи в БД.

Проще использовать SQL. Например: select count(street) from table where street='Виноргадная'. Подобный запрос выдает количество улиц с определенным названием. Можно добавить условия по номеру дома и т.д. Опишите конкретную задачу, попробую помочь с запросом.
vidik вне форума
 
Ответить с цитированием Вверх
Старый 16.02.2010, 17:59   #5
hack
Старожил
 
Аватар для hack
 
Пол:Мужской
Регистрация: 27.05.2005
Адрес: Тверь (Первомайка)
Сообщений: 1,929
Репутация: 3260
Exclamation Re: Как сосчитать одинаковые записи в БД.

Что я хочу сделать:
Есть три поля c с данными по адресу (Улица - № Дома - № Корпуса) и пустое 4-е поле.

| Поле_1| Поле_2 | Поле_3 | Поле_4 |
| 1 ____| 1 _____| 1 _____| 2_____ |
| 1_____| 1_____ | 1 _____| 2 _____|
| 1 ____| 2 _____| 1 _____| 3 _____|
| 1 ____| 2 _____| 1 _____| 3_____ |
| 1 ____| 2 _____| 1 _____| 3_____ |
| 3 ____| 1 _____| 1 _____| 4 _____|
| 3 ____| 1 _____| 1 _____| 4 _____|
| 3 ____| 1 ____ | 1 _____| 4 _____|
| 2 ____| 3_____ | 1 _____| 1_____ |
| 3 ____| 1_____ | 1_____ | 4 _____|
| 3 ____| 3 _____| 3 _____| 1_____ |


При добавлении записи мне нужно пробежаться по всем записям и найти дубликаты с совпадающими этими тремя полями.
Например записи со значениями 1-1-1 повторяются 2 раза, соответственно в 4-е поле мне нужно поставить '2'. Записи со значениями 1-2-1 повторяются 3 раза - в четвертой поле надо проставить '3' и т.д. Причем записи могут идти не по порядку.
Вариант с скулевским запросом наверно не прокатит по причине огромного кол-ва улиц (около 2000).
ЗЫ Опишу общий принцип - имеется БД установленных домовых коммутаторов (сейчас около 500 шт, в дальнейшем будет 5500-6000 записей). В теории 1 коммутатор - 1 адрес, но получилось так, что на некоторых адресах пришлось установить 2,3 а то и 4 коммутатора. Естественно адрес установки у них один (Поле -1, Поле -2,Поле -3) только номер подъезда меняется, но это не важно. Отсортировать записи в DBGridEh по трем полям мне не удается, поэтому и решил этим гемороем заняться. Может есть способ попроще - буду признателен за помощь (в Твери готов и поляну накрыть). Вопрос не срочный, но хотелось бы в месячный срок уложиться.
__________________
У победы много отцов, поражение всегда сирота.

Последний раз редактировалось hack; 16.02.2010 в 21:32..
hack вне форума
 
Ответить с цитированием Вверх
Старый 17.02.2010, 09:40   #6
Vasuha
Постоялец
 
Пол:Мужской
Регистрация: 13.03.2008
Адрес: Минск
Сообщений: 257
Репутация: 231
По умолчанию Re: Как сосчитать одинаковые записи в БД.

При добавлении записи, заносите всегда в поле4 - "1". А когда захотите узнать количество сгруппируйте по первым трем полям а четвертое - SUM. Вот и узнаете количество на каждой записе.
__________________
Vasuha вне форума
 
Ответить с цитированием Вверх
Старый 17.02.2010, 11:36   #7
vidik
Пользователь
 
Аватар для vidik
 
Пол:Мужской
Регистрация: 20.05.2006
Сообщений: 51
Репутация: 157
По умолчанию Re: Как сосчитать одинаковые записи в БД.

Зачем отягощать БД одинаковыми записями. Проведите нормализацию. Добавте таблицу "TComm" с полями, например: IDComm (идентификатор), SerialComm (серийный номер комутатора), IDAdr (ссылка на адресс из таблицы адресов). Тогда в таблице адресов будет одна запись (1,1,1) а в таблице TComm - несколько записей со ссылкой на этот адресс.

Таблица TAdr
IDAdrStreetDomKorp
1111
2121
3311
4231
5333

Таблица TComm
IDCommSerialCommIDAdr
1xxx-xxx1
2xxx-xxx2
3xxx-xxx1
4xxx-xxx3
5xxx-xxx3
6xxx-xxx5
7xxx-xxx4
8xxx-xxx4
9xxx-xxx4

Запрос:
SELECT Street, Dom, Korp, Count(IDComm) AS Kol
FROM TAdr, TComm
WHERE TAdr.IDAdr=TComm.IDAdr
GROUP BY Street, Dom, Korp

Результат:
StreetDomKorpKol
1112
1211
2313
3112
3331

Цитата:
Вариант с скулевским запросом наверно не прокатит по причине огромного кол-ва улиц (около 2000).

У меня уже больше 22000 записей - нет проблем.

P.S. Если нет необходимости идентифицировать коммутаторы, просто вводите ручками в поле_4 Вашей таблицы количество установленных коммутаторов и при изменении их количества - редактируйте соответствующую запись. Допускать же одинаковые записи в БД - крайне неэфективно.

Последний раз редактировалось vidik; 17.02.2010 в 11:48..
vidik вне форума
 
Ответить с цитированием Вверх
Ответ


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
В сети одинаковые имена Gramazeka Скорая помощь 10 25.01.2010 19:03
Опера грузит одинаковые картинки tagen Скорая помощь 25 26.03.2009 17:18
хелп - как сосчитать сколько заглавных букв в предложении? XXXAlex Visual C++ / С/C++ 15 20.11.2008 11:28
Найти одинаковые файлы - чем лучше? Душелов Скорая помощь 8 02.08.2008 21:42
Помогите(сдавать срочно)-Сосчитать Гласные и Согласные в словах(код внутри) XXXAlex Visual C++ / С/C++ 6 03.05.2008 01:53

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Текущее время: 12:18. Часовой пояс GMT +3.


Copyright ©2004 - 2025 NoWa.cc

Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2025, vBulletin Solutions, Inc. Перевод: zCarot
Время генерации страницы 0.15549 секунды с 11 запросами