Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Сортировать в MS SQL без order by  [new]
topdon
Member

Откуда: Ростов- на- Дону
Сообщений: 564
Здравствуйте, уважаемые коллеги!
Программирую в HTML5 Builder с использованием SQL Server. все это в среде PHP.
столкнулся с тем, что не проходят запросы с order by, Например

SELECT [id]
      ,[Filename]
      ,[Type]
      ,[Kind]
      ,[date]
      ,[Title]
      ,[Link]
  FROM [libra1].[dbo].[Presentation]  where type = 'present' 
  order by [date]  desc


и получаю

Application raised an exception class PDOException with message 'SQLSTATE[42000]: [Microsoft][SQL Server Native Client 10.0][SQL Server]Incorrect syntax near the keyword 'order'.'

Таких запросов много. Что делать, не знаю. Упрятать order by в функцию или представление не дает.
29 окт 14, 11:10    [16771570]     Ответить | Цитировать Сообщить модератору
 Re: Сортировать в MS SQL без order by  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Order by - это единственное средство получения гарантированного порядка в наборе данных.
Смотрите профайлером, какой запрос уходит на сервер. После этого крутите вашу библиотеку доступа к серверу.
29 окт 14, 11:25    [16771668]     Ответить | Цитировать Сообщить модератору
 Re: Сортировать в MS SQL без order by  [new]
Glory
Member

Откуда:
Сообщений: 104751
topdon
Что делать, не знаю

Сообщение говорит о неправильном синтаксисе
29 окт 14, 11:31    [16771710]     Ответить | Цитировать Сообщить модератору
 Re: Сортировать в MS SQL без order by  [new]
Date_
Guest
Не называйте поле зарезервированным словом.
29 окт 14, 11:32    [16771721]     Ответить | Цитировать Сообщить модератору
 Re: Сортировать в MS SQL без order by  [new]
topdon
Member

Откуда: Ростов- на- Дону
Сообщений: 564
Гавриленко Сергей Алексеевич,

Господи, сколько мучений из- за какой- то паршивой даты. Нужно, чтобы новости выводились в обратном порядке. Всего- то.
К сожалению, к серверу я доступа не имею. Получается, что клиентская часть использует обрубленный синтаксис.
29 окт 14, 11:38    [16771761]     Ответить | Цитировать Сообщить модератору
 Re: Сортировать в MS SQL без order by  [new]
Glory
Member

Откуда:
Сообщений: 104751
topdon
Нужно, чтобы новости выводились в обратном порядке. Всего- то.

Если вам нужно, то вам и придется указать это.
А серверу никакое упорядочивание не нужно
29 окт 14, 11:41    [16771782]     Ответить | Цитировать Сообщить модератору
 Re: Сортировать в MS SQL без order by  [new]
topdon
Member

Откуда: Ростов- на- Дону
Сообщений: 564
Date_,

Не помогает

SELECT [id]
,[Filename]
,[Type]
,[Kind]
-- ,[date]
,[Title]
,[Link]
FROM [libra1].[dbo].[Presentation] where type = 'present'
order by [id] desc

результат тот же.
29 окт 14, 11:41    [16771785]     Ответить | Цитировать Сообщить модератору
 Re: Сортировать в MS SQL без order by  [new]
StarikNavy
Member

Откуда: Москва
Сообщений: 2415
topdon,

type ключевое слово, может [type] попробовать?
29 окт 14, 11:42    [16771794]     Ответить | Цитировать Сообщить модератору
 Re: Сортировать в MS SQL без order by  [new]
Хитрый жук
Member

Откуда:
Сообщений: 9
Можно попробовать так
SELECT [id]
      ,[Filename]
      ,[Type]
      ,[Kind]
      ,[date]
      ,[Title]
      ,[Link]
      ,row_number() over (order by [date]  desc)
FROM [libra1].[dbo].[Presentation]  where type = 'present'
29 окт 14, 11:42    [16771795]     Ответить | Цитировать Сообщить модератору
 Re: Сортировать в MS SQL без order by  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
topdon
Гавриленко Сергей Алексеевич,

Господи, сколько мучений из- за какой- то паршивой даты. Нужно, чтобы новости выводились в обратном порядке. Всего- то.
К сожалению, к серверу я доступа не имею. Получается, что клиентская часть использует обрубленный синтаксис.


"клиентская часть" - это что?

там видимо ODBC используется
29 окт 14, 11:42    [16771796]     Ответить | Цитировать Сообщить модератору
 Re: Сортировать в MS SQL без order by  [new]
topdon
Member

Откуда: Ростов- на- Дону
Сообщений: 564
Winnipuh,

PDO. И еще стоит Microsoft Sql Server Native Client.
29 окт 14, 11:43    [16771801]     Ответить | Цитировать Сообщить модератору
 Re: Сортировать в MS SQL без order by  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 21253
Попробуйте вместо имени поля в ORDER BY указать его порядковый номер в выходном наборе:
SELECT [id]
      ,[Filename]
      ,[Type]
      ,[Kind]
      ,[date]
      ,[Title]
      ,[Link]
FROM [libra1].[dbo].[Presentation]  
WHERE type = 'present' 
ORDER BY 5 DESC
29 окт 14, 11:44    [16771804]     Ответить | Цитировать Сообщить модератору
 Re: Сортировать в MS SQL без order by  [new]
topdon
Member

Откуда: Ростов- на- Дону
Сообщений: 564
topdon,

Где- то я видел запрос дающий сортировку без order by. Вспомнить не могу.
29 окт 14, 11:45    [16771814]     Ответить | Цитировать Сообщить модератору
 Re: Сортировать в MS SQL без order by  [new]
Glory
Member

Откуда:
Сообщений: 104751
topdon
Где- то я видел запрос дающий сортировку без order by. Вспомнить не могу.

Во сне наверное.
29 окт 14, 11:46    [16771821]     Ответить | Цитировать Сообщить модератору
 Re: Сортировать в MS SQL без order by  [new]
Glory
Member

Откуда:
Сообщений: 104751
SELECT [id]
      ,[Filename]
      ,[Type]
      ,[Kind]
      ,[date]
      ,[Title]
      ,[Link]
  FROM [libra1].[dbo].[Presentation]  where [Type] = 'present' 
  order by [date]  desc


Сообщение было отредактировано: 29 окт 14, 11:47
29 окт 14, 11:47    [16771825]     Ответить | Цитировать Сообщить модератору
 Re: Сортировать в MS SQL без order by  [new]
topdon
Member

Откуда: Ростов- на- Дону
Сообщений: 564
Akina,
это пробовал. То же самое.
29 окт 14, 12:01    [16771937]     Ответить | Цитировать Сообщить модератору
 Re: Сортировать в MS SQL без order by  [new]
topdon
Member

Откуда: Ростов- на- Дону
Сообщений: 564
Хитрый жук,

Это прокатило. Но не отсортировало.
http://library.rsue.ru/aaaalibra/elpresent.php
Нужно наоборот.
29 окт 14, 12:04    [16771959]     Ответить | Цитировать Сообщить модератору
 Re: Сортировать в MS SQL без order by  [new]
o-o
Guest
ему не нравится нечто непосредственно перед order.
попробуйте фильтр убрать совсем, проканает?
или вот так:
where type = 'present' and 1 = 1

может, кто-то что-то с апострофом химичит при отсылке запроса
29 окт 14, 12:06    [16771974]     Ответить | Цитировать Сообщить модератору
 Re: Сортировать в MS SQL без order by  [new]
invm
Member

Откуда: Москва
Сообщений: 9845
topdon,

Как обычно, происходит битие головой об стену. С разбега.

Вместо этого вы можете:
1. Выяснить почему ваш "HTML5 Builder в середе PHP" корежит запросы и отучить его от этого.
2. Завернуть запрос в процедуру. Уже в процедуре можете делать что угодно.
29 окт 14, 12:12    [16772010]     Ответить | Цитировать Сообщить модератору
 Re: Сортировать в MS SQL без order by  [new]
topdon
Member

Откуда: Ростов- на- Дону
Сообщений: 564
Glory,
Вот вспомнил. Но это для Oracle.

Only order by guarantees the order.

[src]select e1.* 
  from e e1,
  ( select e2.id, count(*) as rn from e e2, e e3
      where e3.sal >= e2.sal  
        and e3.id >= e2.id
      group by e2.id
  ) e4
  where e1.id = e4.id
  start with e4.rn = 1
  connect by e4.rn = prior e4.rn + 1
[/SRC]
No order by, but guaranteed order :-))) https://www.sql.ru/forum/images/smoke.gif
29 окт 14, 14:12    [16772740]     Ответить | Цитировать Сообщить модератору
 Re: Сортировать в MS SQL без order by  [new]
Mr_guest
Guest
invm
Завернуть запрос в процедуру. Уже в процедуре можете делать что угодно.


+1
29 окт 14, 15:17    [16773249]     Ответить | Цитировать Сообщить модератору
 Re: Сортировать в MS SQL без order by  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4902
topdon,

Я предполагаю, что данный запрос обертывается другим запросом внутри движка, который вы используете. А ORDER BY в подзапросе можно использовать только при наличии TOP . Добавьте TOP 9999999999 -- посмотрите, что получится
29 окт 14, 15:42    [16773430]     Ответить | Цитировать Сообщить модератору
 Re: Сортировать в MS SQL без order by  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
a_voronin
topdon,

Я предполагаю, что данный запрос обертывается другим запросом внутри движка, который вы используете. А ORDER BY в подзапросе можно использовать только при наличии TOP . Добавьте TOP 9999999999 -- посмотрите, что получится
Была бы другая ошибка, а не incorrect syntax.
29 окт 14, 15:49    [16773478]     Ответить | Цитировать Сообщить модератору
 Re: Сортировать в MS SQL без order by  [new]
o-o
Guest
a_voronin
ORDER BY в подзапросе можно использовать только при наличии TOP


-- invalid character before order by:
select *
from (values (1)) v(t);
order by 1;

Msg 156, Level 15, State 1, Line 3
Incorrect syntax near the keyword 'order'.


-- subquery with order by
select * from (
select *
from (values (1)) v(t)
order by 1)x;

Msg 1033, Level 15, State 1, Line 4
The ORDER BY clause is invalid in views, inline functions, derived tables, subqueries, and common table expressions, unless TOP or FOR XML is also specified.
29 окт 14, 15:59    [16773542]     Ответить | Цитировать Сообщить модератору
 Re: Сортировать в MS SQL без order by  [new]
Хитрый жук
Member

Откуда:
Сообщений: 9
topdon,

А попробуйте так
select [id]
      ,[Filename]
      ,[Type]
      ,[Kind]
      ,[date]
      ,[Title]
      ,[Link]
from (
	SELECT [id]
		  ,[Filename]
		  ,[Type]
		  ,[Kind]
		  ,[date]
		  ,[Title]
		  ,[Link]
		  ,row_number() over (order by [date]  desc) as rn
	FROM [libra1].[dbo].[Presentation]  where type = 'present'
) t where rn = rn
29 окт 14, 17:07    [16774080]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить