| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Базы данных и репортинг > Найти наиболее часто встречающюся строку |
| Автор: ilyuha 28.11.2007, 17:40 |
| Народ, помогите плиз... есть таблица с полем Climbers с ФИО людей. нужно вытянуть наиболее часто повторяющуюся строку этого поля в таблице. например: 1-ая запись - Иванов Петров Сидоров Филатов 2-ая: Зайцев Медведев Филатов Гришин 3-ия: Иванов Филатов Громов Степин функция, в данном случае, должна возвращать через ADOQuery значение 'Филатов' помогите плиз |
| Автор: Nimua 29.11.2007, 17:21 |
| а можно подробнее структуру таблицы? у тебя в поле просто список эл-тов? |
| Автор: pavelv 2.12.2007, 08:17 |
| Я так понял, что поле одно. Видимо структура таблицы не была продумана д ля решения подобного вида задачь. Из вариантов двойной цикл. Внешний по всем именам текущей колонки, внутренний по всем именам внутренних колонок. Записывать все в массив, скорее всего динамический. Что выудить различные имена из одной колонки нужно искать в строке символ #13 или (эм подскажите забыл P.S> В понедельник на работе смогу посмотреть код второго символа, если нужно будет. |
| Автор: Данкинг 2.12.2007, 11:27 |
| Не понял, а Memo при чём? Да, действитетельно пример неудачный, но я бы сделал так: собрал все слова (разделённые пробелом) в один массив, а второму массиву, проходя циклом по первому, присваивал бы число повторений соответствующего слова... Как-то так, глубже сейчас думать не хочется. |
| Автор: kobra 2.12.2007, 15:41 |
| можно создать временную таблицу (или даже луще постаяную) и загнав туда данные выудить запросом нужную. |
| Автор: Deniz 3.12.2007, 07:32 |
| Nimua, +1 ilyuha, покажи структуру БД, укажи тип и версию СУБД, опиши все подробно, в том числе и результат, и только потом будем думать. |
| Автор: ilyuha 3.12.2007, 14:58 |
| корочь, структура: поля - ID LabelAscention Climbers MountName MountHeight RegionMount Country BeginingDate FinishingDate AllDayOfAscention types - INT TEXT MEMO TEXT INT TEXT TEXT DATE DATE INT типы приведенны соответственно полям. каждая запись - одно восхождение. Climbers - группа альпинистов с адресами. каждый в новой строке. надо найти альпиниста в бд совершившего наибольшее кол-во восхождений(естественно, группы могут быть разными). юзаю ADO+Access |
| Автор: Deniz 4.12.2007, 07:24 |
| ilyuha, структура БД не совсем правильная. Вот это большая проблема. Нужно было отдельные таблицы делать, а не в одно поле MEMO пихать все. Классическая связь много ко многим Восхождение <-> Альпинист. Причем лучше начать прямо сейчас переделку БД, а то потом еще попросят всех альпинистов, которые живут рядом/в одном городе/на одной улице и т.д. Добавлено через 5 минут и 28 секунд Да, по обработке: 1. select * from ... 2. Создать дин. массив 3. пробежать по всем записям в запросе 4. для каждой записи 4.1. выдрать ФИО из MEMO 4.2. добавить 1 к ФИО в массиве или просто добавить в массив 5. сортировать массив по кол-ву по убыванию 6. вывести массив в нужный компонент |
| Автор: pavelv 6.12.2007, 06:20 |
| ilyuha действительно лучше менять структуру. Думаю самое простое завести для альпинистов отдельную таблицу в кт будут поля: ФИО Альпиниста, Инфа о нем, Уникальный код его восхождения(связь с исходной таблицей, тоесть куда он лазил и когда.), Номер альпиниста по порядку в восхождении(чтобы их различать, можно и без него обойтись конечно). Вообще Deniz описал уже процесс кодирования, но для облегчения нект задач можно вот как вывернуться. На форму поместить невидимый компонент TDBMemo который с базой будет связан и когда будешь бежать по всем записям таблицы из этого Memo построчно извлекать все фамилии альпинистов. |
| Автор: ilyuha 8.12.2007, 17:00 |
| Спасибо всем огромное! да, так действительно будет намного проще и правильнее. просто, это моя первая прога работы с БД вообще - не учел я этого при продумке структуры таблицы.. |