Построковая обработка sql выборки в сценарии — различия между версиями
| Строка 35: | Строка 35: | ||
[[Файл:Обработка таблицы 2.PNG |center]] | [[Файл:Обработка таблицы 2.PNG |center]] | ||
| − | В самом начале счетчику i присваивается значение | + | В самом начале счетчику i присваивается значение "-1", конечному значению счетчика присваивается количество строк в таблице с помощью запроса: |
select @ilast = count(*) from notsorted | select @ilast = count(*) from notsorted | ||
| Строка 45: | Строка 45: | ||
С полученным значением name производятся действия. | С полученным значением name производятся действия. | ||
| + | Результат: | ||
| − | Недостатки: обработка таблицы идет по значению id. Так как в таблице нет строк с id=1, 2 , то сценарий будет делать лишний цикл, выдавать ошибку на sql запросе. Вариант неприменим, если в таблице нет уникального идентификатора, даже если есть некое числовое поле - если у некоторых строк оно одинаковое, то сценарий не сможет вывести эти значения. | + | [[Файл:Обработка таблицы 2-1.PNG| center]] |
| + | |||
| + | Недостатки: обработка таблицы идет по значению id. Так как в таблице нет строк с id=1, 2 , то сценарий будет делать лишний цикл, выдавать ошибку на sql запросе (или выдавать одно значение несколько раз). Вариант неприменим, если в таблице нет уникального идентификатора, даже если есть некое числовое поле - если у некоторых строк оно одинаковое, то сценарий не сможет вывести эти значения. | ||
=== Вариант 1 для таблицы с числовым полем === | === Вариант 1 для таблицы с числовым полем === | ||
| + | |||
=== Вариант 2 для таблицы со строковыми полями === | === Вариант 2 для таблицы со строковыми полями === | ||
Версия 13:37, 19 сентября 2013
Если у вас имеется sql-таблица, в которой есть данные, зачастую возникает необходимость в обработке этих данных. Сложность заключается в том, что данные могут быть не пронумерованы или даже если пронумерованы, порядковые номера могут идти не по порядку.
Возьмем к примеру следующую таблицу notsorted с двумя столбцами Id и name:
| id | name |
| 0 | Иванов Иван |
| 3 | Петров Петр |
| 4 | Сергеев Сергей |
| 5 | Дмитриев Дмитрий |
| 6 | Алексей Алексей |
Как видно в таблице id идет не по порядку. При решении данной задачи необходимо учитывать этот факт.
Классический способ решения (не применим)
В самом начале счетчику i присваивается значение "-1", конечному значению счетчика присваивается количество строк в таблице с помощью запроса:
select @ilast = count(*) from notsorted
Далее реализован цикл, счетчик инкрементируется, затем сравнивается с конечным значением. Выбор значения происходит следующим sql запросом:
select @name=name from notsorted where id=@id
С полученным значением name производятся действия.
Результат:
Недостатки: обработка таблицы идет по значению id. Так как в таблице нет строк с id=1, 2 , то сценарий будет делать лишний цикл, выдавать ошибку на sql запросе (или выдавать одно значение несколько раз). Вариант неприменим, если в таблице нет уникального идентификатора, даже если есть некое числовое поле - если у некоторых строк оно одинаковое, то сценарий не сможет вывести эти значения.