Построковая обработка sql выборки в сценарии — различия между версиями

Материал из Oktell
Перейти к: навигация, поиск
Строка 30: Строка 30:
 
Как видно в таблице id идет не по порядку. При решении данной задачи необходимо учитывать этот факт.  
 
Как видно в таблице id идет не по порядку. При решении данной задачи необходимо учитывать этот факт.  
  
=== Классический способ решения ===  
+
=== Классический способ решения (не применим) ===  
 +
 
  
 
[[Файл:Обработка таблицы 2.PNG |center]]
 
[[Файл:Обработка таблицы 2.PNG |center]]
 +
 +
В самом начале счетчику i присваивается значение 0, конечному значению счетчика присваивается количество строк в таблице с помощью запроса:
 +
 +
select @ilast = count(*) from notsorted
 +
 +
Далее реализован цикл, счетчик инкрементируется, затем сравнивается с конечным значением. Выбор значения происходит следующим sql запросом:
 +
 +
select @name=name from notsorted where id=@id
 +
 +
С полученным значением name производятся действия.
 +
 +
 +
Недостатки: обработка таблицы идет по значению id. Так как в таблице нет строк с id=1, 2 , то сценарий будет делать лишний цикл, выдавать ошибку на sql запросе. Вариант неприменим, если в таблице нет уникального идентификатора, даже если есть некое числовое поле - если у некоторых строк оно одинаковое, то сценарий не сможет вывести эти значения.
  
 
=== Вариант 1 для таблицы с числовым полем ===  
 
=== Вариант 1 для таблицы с числовым полем ===  

Версия 13:29, 19 сентября 2013

Если у вас имеется sql-таблица, в которой есть данные, зачастую возникает необходимость в обработке этих данных. Сложность заключается в том, что данные могут быть не пронумерованы или даже если пронумерованы, порядковые номера могут идти не по порядку.

Возьмем к примеру следующую таблицу notsorted с двумя столбцами Id и name:


notsorted
id name
0 Иванов Иван
3 Петров Петр
4 Сергеев Сергей
5 Дмитриев Дмитрий
6 Алексей Алексей


Как видно в таблице id идет не по порядку. При решении данной задачи необходимо учитывать этот факт.

Классический способ решения (не применим)

Обработка таблицы 2.PNG

В самом начале счетчику i присваивается значение 0, конечному значению счетчика присваивается количество строк в таблице с помощью запроса:

select @ilast = count(*) from notsorted

Далее реализован цикл, счетчик инкрементируется, затем сравнивается с конечным значением. Выбор значения происходит следующим sql запросом:

select @name=name from notsorted where id=@id 

С полученным значением name производятся действия.


Недостатки: обработка таблицы идет по значению id. Так как в таблице нет строк с id=1, 2 , то сценарий будет делать лишний цикл, выдавать ошибку на sql запросе. Вариант неприменим, если в таблице нет уникального идентификатора, даже если есть некое числовое поле - если у некоторых строк оно одинаковое, то сценарий не сможет вывести эти значения.

Вариант 1 для таблицы с числовым полем

Вариант 2 для таблицы со строковыми полями