Simple-Scada forum

Simple-Scada 2 => Ваши вопросы => Тема начата: Bill от 08 Декабря 2021, 10:23:38

Название: Поиск или сортировка в таблице с БД
Отправлено: Bill от 08 Декабря 2021, 10:23:38
Добрый день !
Есть таблица рецептов c БД. Есть ли скрипт для поиска нужных технологии (или сортировка по строкам) ?
Название: Re: Поиск или сортировка в таблице с БД
Отправлено: Simple Scada от 08 Декабря 2021, 13:19:31
Здравствуйте.
Для решения Вашей задачи, можно сформировать SQL-запрос так, чтобы он выбирал только нужные Вам данные и затем отобразить их в Таблице рецептов. Например, можно создать переменную "vrSearch" с типом "string" назначить ее полю, а на "OnDataChange" написать такой скрипт:

Код: (delphi)
begin
  if Sender is TM_Field then          // проверяем, что Sender это поле
    with Sender as TM_Field do

  tblRecipes.RunSQL('SELECT * FROM `recipes` WHERE `name` LIKE' + QuotedStr('%'+ AsStr +'%'), tsSaveFixRow);
end.
Данный SQL запрос будет делать выборку из БД с условием частичного совпадения в столбце "Имя рецепта" по введённому в поле тексту.

Также, с помощью SQL-запроса, можно выполнить сортировку данных, например:
Код: (delphi)
tblRecipes.RunSQL('SELECT * FROM `recipes` ORDER BY `name` ASC', tsSaveFixRow);  - данные выборки будут отсортированы в прямом порядке

tblRecipes.RunSQL('SELECT * FROM `recipes` ORDER BY `name` DESC', tsSaveFixRow); - данные выборки будут отсортированы в обратном порядке.
Название: Re: Поиск или сортировка в таблице с БД
Отправлено: Bill от 10 Декабря 2021, 07:39:27
Спасибо за ответ
Название: Re: Поиск или сортировка в таблице с БД
Отправлено: sir от 20 Декабря 2023, 13:58:41
А если Таблица формируется не из SQL базы, а из многих параметров переменных, постоянно изменяя свои значения, и писать-читать всю таблицу в SQL базу - ненужная нагрузка на сервер, да и вряд ли он справится в десятками записи-чтения данных в секунду. Как в этом случае организовать сортировку данных в таблице?
Название: Re: Поиск или сортировка в таблице с БД
Отправлено: Simple_Scada от 22 Декабря 2023, 11:11:08
Здравствуйте.

У таблицы нет каких-либо функций для сортировки данных. С доступными методами для работы с таблицей можно ознакомиться по ссылке (https://simple-scada.com/help/script/tmtable.html).
Название: Re: Поиск или сортировка в таблице с БД
Отправлено: pan2000 от 23 Декабря 2023, 05:45:49
   Здравствуйте.

  Сортировка больших объёмов данных в скрипте требует большой затраты времени, что крайне не понравится серверу Simple-Scada. Процесс сортировки определяется алгоритмом и способом сравнения данных. Простые алгоритмы сортировки доступны в сети. Для таблицы данные представлены текстом, возможны следующие варианты сравнения данных:
- собственно сравнение текста для текстовых значений;
- для чисел - перевод текста в числовое значение с последующим сравнением;
- для чисел - выравнивание текстового представления "левыми" нулями по десятичной точке с последующим сравнением.

Во вложении пример сортировки перемешиванием (работа с индексами для сокращения количества обменов между ячейками таблицы) для тестовой таблицы из 8192 ячеек (для некоторых способов сравнения и 2000 много!), заполняемых убывающей последовательностью или случайной целочисленной или случайной вещественной.
Пример позволяет оценить время выполнения сортировки по количеству сортируемых данных и одному из трех способов сравнения. Фрагмент экрана показывает затраты времени на сортировку различными способами сравнения.

P.S. В общем случае (не зная задачи) можно предположительно облегчить жизнь серверу следующими вариантами:
- сортировка при поступлении очередного значения;
- разделение процесса сортировки на последовательное выполнение серии скриптов, сервер вздохнёт свободнее, но общее время сортировки возрастет по сравнению с односкриптовым вариантом;
- несколько таблиц (возможно неотображаемых) для разных диапазонов значений, по значению определяется нужная таблица, сортировка по каждой отдельной с последующим объединением таблиц.

P.P.S Для сравнения добавлена классическая сортировка перемешиванием с перемещением содержимого ячеек. На фрагменте экрана приведены времена сортировок по уже отсортированной таблице. Для классики первая сортировка "против шерсти" убывающей последовательности требует вдвое большего времени по сравнению с уже отсортированной последовательностью.
Впрочем в примере это видно нагляднее.
Название: Re: Поиск или сортировка в таблице с БД
Отправлено: sir от 24 Декабря 2023, 20:23:59
Спасибо! Очень ценная информация.