Аватар для Samrisbe
1365 / 732 / 67
Регистрация: 28.01.2011
Сообщений: 2,069

Запрос по совпадению нескольких символов в цикле

26.03.2020, 02:48. Показов 898. Ответов 5

Студворк — интернет-сервис помощи студентам
Добро всем
У меня такой запрос работает с двумя строками а когда строк около 100 выдает ошибку слишком сложный запрос:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
AnsiString sql;
    ADOQuery3->SQL->Text="SELECT ФИО,Адрес,Квартира,КодАбон,Телефон,НомерДоговора,Примечание FROM Адреса INNER JOIN Абоненты ON Адреса.АдрКод = Абоненты.АдрКод";
    ADOQuery3->Open();
    ADOQuery3->Active=true;
 
    sql="SELECT ФИО,Адрес,Квартира,КодАбон,Телефон,НомерДоговора,Примечание FROM Адреса INNER JOIN Абоненты ON Адреса.АдрКод = Абоненты.АдрКод WHERE Абоненты.КодАбон="+ADOQuery3->Fields->Fields[3]->AsString;
 
    //в цикле я определяю есть совпадение и дописываю Id (КодАбон)
    for(int i=0;i<ADOQuery3->RecordCount;i++)
      {
      if(ADOQuery3->Fields->Fields[6]->AsString.Pos(Edit4->Text)) //Edit4->Text параметр запроса 
        {
        sql+="  OR Абоненты.КодАбон="+ADOQuery3->Fields->Fields[3]->AsString;
        }
      ADOQuery3->Next();
      }
 
 
   ADOQuery1->SQL->Text=sql;
   ADOQuery1->Open();
   ADOQuery1->Active=true;
   DBGrid1->Columns->Items[3]->Visible=false;
задача одним запросом считать те данные у которых в примечании есть совпадение с Edit4->Text например запрос должен считать если в столбце примечание запись "Велосипед" и "Велорикша" и "Велодром" а в Edit4->Text задали "вело"

Добавлено через 9 минут
То-есть мне надо разом считать строки id номера которых я определяю в цикле по совпадению нескольких символов с параметром запроса
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
26.03.2020, 02:48
Ответы с готовыми решениями:

Запрос на выборку по совпадению с частью поля
Здравствуйте. Есть запрос на выборку. Выборка происходит по определенному полю, с помощью . Как сделать, что бы при вводе части из поля,...

Группировка данных по совпадению первых трех символов в QRGroup
Можно ли, используя QRGroup сгруппировать данные по совпадению первых трех символов, если можно, то подскажите как, please...

Как переделать запрос в цикле на один запрос с фильтром по массиву
Мне говорят: код неправильный, надо запрос ciblockelement::getlist c фильтром по разделу, который в цикле для каждого раздела выполняется...

5
 Аватар для Dinkin
783 / 556 / 136
Регистрация: 31.05.2013
Сообщений: 3,150
Записей в блоге: 3
27.03.2020, 10:45
Добрый день, а какая БД?
0
Заблокирован
09.04.2020, 14:22
Цитата Сообщение от Samrisbe Посмотреть сообщение
Добро всем
У меня такой запрос работает с двумя строками а когда строк около 100 выдает ошибку слишком сложный запрос:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
AnsiString sql;
    ADOQuery3->SQL->Text="SELECT ФИО,Адрес,Квартира,КодАбон,Телефон,НомерДоговора,Примечание FROM Адреса INNER JOIN Абоненты ON Адреса.АдрКод = Абоненты.АдрКод";
    ADOQuery3->Open();
    ADOQuery3->Active=true;
 
    sql="SELECT ФИО,Адрес,Квартира,КодАбон,Телефон,НомерДоговора,Примечание FROM Адреса INNER JOIN Абоненты ON Адреса.АдрКод = Абоненты.АдрКод WHERE Абоненты.КодАбон="+ADOQuery3->Fields->Fields[3]->AsString;
 
    //в цикле я определяю есть совпадение и дописываю Id (КодАбон)
    for(int i=0;i<ADOQuery3->RecordCount;i++)
      {
      if(ADOQuery3->Fields->Fields[6]->AsString.Pos(Edit4->Text)) //Edit4->Text параметр запроса 
        {
        sql+="  OR Абоненты.КодАбон="+ADOQuery3->Fields->Fields[3]->AsString;
        }
      ADOQuery3->Next();
      }
 
 
   ADOQuery1->SQL->Text=sql;
   ADOQuery1->Open();
   ADOQuery1->Active=true;
   DBGrid1->Columns->Items[3]->Visible=false;
задача одним запросом считать те данные у которых в примечании есть совпадение с Edit4->Text например запрос должен считать если в столбце примечание запись "Велосипед" и "Велорикша" и "Велодром" а в Edit4->Text задали "вело"

Добавлено через 9 минут
То-есть мне надо разом считать строки id номера которых я определяю в цикле по совпадению нескольких символов с параметром запроса
Join-ами баловаться не нужно, они максимально нагружают СУБД, чтобы быстро выдать набор. Для этого они и придуманы.
Вашу выборку нужно упростить, например так:

ADOQuery3->SQL->Text="SELECT ФИО,Адрес,Квартира,КодАбон,Телефон,Номер Договора,Примечание FROM АДРЕСА, АБОНЕНТЫ WHERE Адреса.АдрКод = Абоненты.АдрКод"; ТО ЕСТЬ конструкцию JOIN нужно заменить условием WHERE, и после FROM писать имена обеих таблиц, а поля, описанные в условии (WHERE) пишутся только в условии, включать их в общую выборку не нужно, ибо база по ним только проверяет условие.
0
09.04.2020, 14:38

Не по теме:


Цитата Сообщение от tester_me Посмотреть сообщение
Join-ами баловаться не нужно, они максимально нагружают СУБД, чтобы быстро выдать набор. Для этого они и придуманы.
Для меня это очень странное высказывание, а еще больше становится странным так как ТС не указал тип БД.

0
Заблокирован
09.04.2020, 15:14
И еще попробуйте в конец вашего основного SQL-запроса добавить ограничение на количество выбираемых записей: "...LIMIT 50" например. Проверьте, поддерживает ли ваша база такую конструкцию языка. В MySQL, например, это поддерживается. В MS SQL раньше писали лимит в выборке записей в самом начале запроса, типа "SELECT TOP 50....". Если используют ограничение запросов по количеству выбранных записей, то упорядочивают выборку по ключевову полю, пишут, например, в конце всей SQL-строки типа "... ORDER BY ID", где ID - ключевое поле таблицы. При каждой такой выборке сохраняют в переменной значение текущего наибольшего выбранного ID, а в следующем SQL-запросе добавляют условие в выборку типа "...WHERE ...(здесь наши основн.условия запроса)... AND (новый)ID > (старое значение) ID..... ORDER BY ID LIMIT 5O;
Я вам практически описал весь патерн решения вашей типовой задачи )))
0
 Аватар для Samrisbe
1365 / 732 / 67
Регистрация: 28.01.2011
Сообщений: 2,069
12.04.2020, 17:17  [ТС]
Цитата Сообщение от Dinkin Посмотреть сообщение
Добрый день, а какая БД?
Acces
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
12.04.2020, 17:17
Помогаю со студенческими работами здесь

Запрос в цикле или один длинный запрос?
Подскажите, пожалуйста, как лучше поступить? Есть магазин с 20 тыс товаров. Нужно обновить их по некоторым условиям. И вот вопрос, что...

Вставка в строку нескольких символов и удаление символов из строки
не могу найти информацию про это:( какими операторами это делается?

Вывод нескольких значений в цикле
Пишу выборку данных из базы и столкнулся с такой проблемой. Есть определенные числа, к которым в базе привязывается определенное время в...

Создание нескольких массивов в цикле
Возможно ли в цикле создать энное количество массивов? Например while(n!=20) {new arr&lt;n&gt;} Что то на подобие этого. В...

Передача нескольких файлов в цикле
Добрый день! на сайте можно выделить галочкой несколько файлов и они должны качаться. вопрос в том что сколько бы файлов не выделялось...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru