Записи с тегом «SQL»
Выборка данных по датам с помощью GROUP BY, включая даты для которые данные отстутствуют
К примеру, в БД MS SQL Server есть таблица Logs в которую заносятся данные об активности пользователей. По этим данным необходимо сделать выборку, например, подсчитать количество действий пользователей по дням месяца. По выходным и праздникам пользователи приложением не пользуются, поэтому при использовании обычного GROUP BY в результате выборки будут представлены только те даты, для которых нашлись данные, что, например, для построения графиков не подходит.
Генерация тестовых данных средствами MySQL
Средства генерации тестовых данных встроены во многие утилиты для работы с БД, существует большое количество сторонних и даже он-лайн инструментов. Конечно, набор реальных тестовых данных ничто не заменит, но для случая «нагенерить чего-нибудь да по-больше» можно обойтись и встроенными возможностями MySQL.
Выборка последних записей из большой таблицы
К примеру, в MySQL БД есть такая таблица:
`log` ---------- `id` (номер записи в логе) `inserted` (дата и время события) `message` (описание события) `user_id` (вторичный ключ на таблицу пользователей `users`)
По логике приложения важным является выбрать последние записи из этой таблицы для каждого пользователя и вывести их на страницу. Сообщений в между очисткой/архивацией таблицы собирается много (до полумиллиона). Конечно можно сохранять в отдельную таблицу интересующие записи, но есть решение и на чистом SQL (работающее до определённого количества записей, конечно :)).
LIMIT и SQL_CALC_FOUND_ROWS для MS SQL Server
В MySQL есть несколько полезных дополнений к стандартному SQL:
выборка диапазона записей с помощью конструкции LIMIT. Обычно используется для постраничного вывода записей.
подсчёт общего количества записей, возвращаемых запросом с LIMIT без отдельного запроса с
COUNT()с помощьюSQL_CALC_FOUND_ROWS.
Обычно, обе эти возможности используются одновременно.
Проверка на существование добавляемого в таблицу поля в MySQL
Для программы обновления понадобилось написать SQL-скрипт, который проверял бы перед добавлением нового поля в таблицу, не было ли такое поле добавлено ранее. В MySQL для подобных целей необходимо использовать хранимую процедуру, которая после использования удаляется. Оригинал решения дополнен автоматическим определением названия текущей БД.
Определить на какой странице пейджинга окажется запись (ROW_NUMBER() в MySQL)
В процессе разработки приложения понадобилось с помощью SQL-запроса к MySQL-базе определить на какой странице пейджинга окажется определённая запись. Ситуация осложнялась тем, что записи могли быть отсортированы по разному.
Варианты соглашений по именованию объектов в БД
Несколько разных схем именования объектов в БД. Для примера будет взята база гипотетического блога, хранящая информацию о следующих сущностях: записях (posts), категориях (category) и пользователях (users). Один пост может попадать в одну или несколько категория (связь many-to-many), у одного поста всегда один автор (связь one-to-many).
Полнотекстовый поиск в MS SQL Express и его использование с LINQ to SQL
Для включения функции полнотекстового поиска в MS SQL редакции Express (проверялось на 2005-й версии) нужно немного больше действий, чем для использования полнотекстовых индексов в MyISAM-таблицах MySQL, но всё возможно.
Выбор значения автоинкрементного поля для вставленной записи в MS SQL
После INSERT нужно выполнить дополнительные действия:
SqlCommand command = new SqlCommand(@" INSERT INTO [dbo].[orders] ([date_time] ... ... ,[total]) VALUES (@date_time ... ... ,@total); SELECT SCOPE_IDENTITY(); "); int insertedOrderId = Convert.ToInt32(command.ExecuteScalar());
