Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Получить количество строк в выборке и саму выборку  [new]
KasKas
Guest
Здравствуйте.

У нас ситуация следующая: есть PHP 5.3 и mssql2012. Нужно одновременно получать выборку из mssql и количество записей в ней.

Пока на ум приходит 2 варианта:
1) сначала выполнить искомый селект с COUNT(), сохранить в @RowCount, а потом вывести тот же селект, добавив поле @Count.
2) записать выборку искомого селекта во временную таблицу, а потом уже для неё сделать сначала COUNT() в @RowCount, а потом из неё селект * и поле @RowCount

Но по-моему это как-то не по фэншую.. Может есть варианты выполнить это как-то более эстетично?..

ps я занимаюсь sql, php другой человек пишет
28 ноя 13, 02:39    [15203077]     Ответить | Цитировать Сообщить модератору
 Re: Получить количество строк в выборке и саму выборку  [new]
Зайцев Фёдор
Member

Откуда: Лужки
Сообщений: 5308
select @@rowcount

не катит?
28 ноя 13, 02:40    [15203078]     Ответить | Цитировать Сообщить модератору
 Re: Получить количество строк в выборке и саму выборку  [new]
locky
Member

Откуда: Харьков, Украина
Сообщений: 62034
select count(*) over(),*
from sys.tables
28 ноя 13, 02:41    [15203080]     Ответить | Цитировать Сообщить модератору
 Re: Получить количество строк в выборке и саму выборку  [new]
KasKas
Guest
Зайцев Фёдор,
 SELECT *, @@rowcount AS 'ttt' FROM tbl_Units
выводит ноль в последнем столбце.. А если отдельный селект делать - то в принципе получается то же самое, что и у меня..

locky, во! то что надо! Спасибо! Как всегда все просто=))

Всем спасибо!
28 ноя 13, 07:57    [15203245]     Ответить | Цитировать Сообщить модератору
 Re: Получить количество строк в выборке и саму выборку  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31949
KasKas
А если отдельный селект делать - то в принципе получается то же самое, что и у меня..
Не то же самое, а в 2 раза менее затратно.
28 ноя 13, 08:53    [15203336]     Ответить | Цитировать Сообщить модератору
 Re: Получить количество строк в выборке и саму выборку  [new]
Shakill
Member

Откуда: мск
Сообщений: 1887
KasKas,

еще вариант без лишних чтений

SELECT SUM(1) AS cnt, m.id, MAX(m.colA), MAX(m.colB), ...
FROM MyTable AS m
WHERE ...
GROUP BY m.id WITH ROLLUP
, где MyTable.id - это ключевое поле. На выходе в строке с id = NULL будет количество в cnt
28 ноя 13, 10:58    [15203990]     Ответить | Цитировать Сообщить модератору
 Re: Получить количество строк в выборке и саму выборку  [new]
super-code
Member

Откуда:
Сообщений: 244
Ничего себе все наговнокодили, кол-во элементов в таблице передавать столько раз, сколько элементов в таблице.
То есть при запросе 1000 записей, 999 полей передается лишние. Если они байта по 4, то ~4 кб в помойку при протоколе без сжатия.

Автор, может все таки сначала запрос, а потом select @@rowcount ? Или если так хотите в одной выборке, то что-то с union придумать, чтобы в последней строке кол-во записей было?
28 ноя 13, 11:42    [15204460]     Ответить | Цитировать Сообщить модератору
 Re: Получить количество строк в выборке и саму выборку  [new]
KasKas
Guest
alexeyvg
KasKas
А если отдельный селект делать - то в принципе получается то же самое, что и у меня..
Не то же самое, а в 2 раза менее затратно.

в нашем случае видимо все выполняется слишком быстро, чтобы это почувствовать. Говоря "то же самое" я имел ввиду количество кода=)

Shakill
KasKas,

еще вариант без лишних чтений

SELECT SUM(1) AS cnt, m.id, MAX(m.colA), MAX(m.colB), ...
FROM MyTable AS m
WHERE ...
GROUP BY m.id WITH ROLLUP
, где MyTable.id - это ключевое поле. На выходе в строке с id = NULL будет количество в cnt

спасибо, может пригодится)

super-code
Ничего себе все наговнокодили, кол-во элементов в таблице передавать столько раз, сколько элементов в таблице.
То есть при запросе 1000 записей, 999 полей передается лишние. Если они байта по 4, то ~4 кб в помойку при протоколе без сжатия.

Автор, может все таки сначала запрос, а потом select @@rowcount ? Или если так хотите в одной выборке, то что-то с union придумать, чтобы в последней строке кол-во записей было?

Думаю нет особого смысла заморачиваться. В этой выборке максимум пара сотен записей, так что овчинка выделки не стоит..
2 дек 13, 01:43    [15222441]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить