SQLinfo.ru - Все о MySQL PG day 17

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 04.02.2017 23:17:14

klow
Активист
Зарегистрирован: 06.12.2014
Сообщений: 183

View и нумерация строк

Может, кто знает возможно ли пронумеровать строки в view?

Неактивен

 

#2 04.02.2017 23:30:08

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5192

Re: View и нумерация строк

не очень понятно о чем идет речь, поясните на примере
использовать переменные во view можно

Неактивен

 

#3 05.02.2017 00:46:25

klow
Активист
Зарегистрирован: 06.12.2014
Сообщений: 183

Re: View и нумерация строк

Вот об этом

CREATE
DEFINER = 'root'@'%'
VIEW view1
AS
SELECT
  @i := @i + 1 AS row_number,
  t.*
FROM table t,
     (SELECT
         @i := 0) AS z;

При создании view получаю ошибку

View's SELECT contains a variable or parameter

Неактивен

 

#4 05.02.2017 01:03:53

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5192

Re: View и нумерация строк

был не прав

Неактивен

 

#5 05.02.2017 09:25:56

klow
Активист
Зарегистрирован: 06.12.2014
Сообщений: 183

Re: View и нумерация строк

Для меня было-бы лучше, если бы Вы оказались правы. sad
Значит нет способа пронумеровать строки в View?
Может у кого будут идеи если я расскажу, что именно мне нужно?
Суть задачи.
У меня есть сложная View. Запрос, который ее использует должен вычислять разницу между значениями соседних строк.
Вот так, при условии, что удаться получить номера строк.

SELECT v1.Value-v2.Value
FROM View1 v1 JOIN View1 v2 ON v1.gr_id = v2.gr_id AND v1.rownum+1 = v2.rownum

Отредактированно klow (05.02.2017 09:26:56)

Неактивен

 

#6 05.02.2017 19:09:59

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3749

Re: View и нумерация строк

А можно ли сделать соответствующий ORDER BY в итоговом запросе? Тогда можно было бы вычислять разницу значений у соседей с помощью переменных.

Неактивен

 

#7 06.02.2017 08:33:44

klow
Активист
Зарегистрирован: 06.12.2014
Сообщений: 183

Re: View и нумерация строк

rgbeast написал:

А можно ли сделать соответствующий ORDER BY в итоговом запросе?

Не понял, можно детальнее?

rgbeast написал:

Тогда можно было бы вычислять разницу значений у соседей с помощью переменных.

С переменными в запросе под .net тоже есть проблемы. Не хотелось бы сейчас отвлекаться на это.

Неактивен

 

#8 06.02.2017 12:30:28

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3749

Re: View и нумерация строк

Имел в виду классическую схему вычисления разности соседей в упорядоченной выборке:

SET @prev=0; SELECT value-@prev,@prev:=value FROM A ORDER BY ord;


Про .net и переменные не знаю.

Неактивен

 

#9 06.02.2017 12:38:12

klow
Активист
Зарегистрирован: 06.12.2014
Сообщений: 183

Re: View и нумерация строк

rgbeast написал:

Имел в виду классическую схему вычисления разности соседей в упорядоченной выборке:

SET @prev=0; SELECT value-@prev,@prev:=value FROM A ORDER BY ord;

Спасибо! Не сообразил, что действительно и так можно.

rgbeast написал:

Про .net и переменные не знаю.

При стандартном подключении все переменные @ должны быть заменены на их значения еще до передачи в БД. Есть правда обходной путь. Наверно, буду его использовать.
Еще раз спасибо!

Неактивен

 

#10 06.02.2017 12:52:48

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2055

Re: View и нумерация строк

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


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#11 06.02.2017 13:04:11

klow
Активист
Зарегистрирован: 06.12.2014
Сообщений: 183

Re: View и нумерация строк

На клиенте сложно или я не понимаю как.  Дело в том, что в идеале, должна возвращаться одна строка. Или если идет несколько, то вычисление уже должно уже быть на первой строке. С переменными  можно после отсортировать в нужном порядке и отобрать. А клиенте уже это не получиться (вернее сложно).
Процедуру без переменных тоже не понимаю, как можно использовать?

Неактивен

 

#12 06.02.2017 13:07:27

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2055

Re: View и нумерация строк

На клиенте - имелось в виду select'нуть нужные столбцы из всего набора строк, и на клиентской стороне уже посчитать нужные разницы.
Что касается процедуры - просто в хранимой процедуре в цикле извлекаете строку за строкой и считаете нужные Вам разницы.


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#13 06.02.2017 13:17:42

klow
Активист
Зарегистрирован: 06.12.2014
Сообщений: 183

Re: View и нумерация строк

deadka написал:

На клиенте - имелось в виду select'нуть нужные столбцы из всего набора строк, и на клиентской стороне уже посчитать нужные разницы.

Понятно. В моем случае не очень хорошее решение. Придется существенно дописывать код.  Я сразу вывожу информацию пользователю, без педобработки (не считая SELECT).

deadka написал:

Что касается процедуры - просто в хранимой процедуре в цикле извлекаете строку за строкой и считаете нужные Вам разницы.

К сожалению процедура (MySql) не умеет возвращать эту информацию в виде SELECT. То есть, нужно на клиенте писать код для вывода этой информации. А тем более если понадобиться вывести несколько строк. Тут вообще ж...

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson