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

Откуда: Кострома
Сообщений: 24
Всем добрый вечер! У меня возник вопрос по БД. Имеется три таблицы "Темы", "Вопросы", "Ответы". Они связаный между собой "один-ко-многим" ( Темы<--->>Вопросы<--->>Ответы). БД предназначена для хранения вопросов, ответов, сведений о студентах и прочего. Собственно вопрос: по одной теме могут храниться около двухсот вопросов, из этих вопросов студенту необходимо показать случайные,скажем, двадцать вопросов. Могли бы вы подсказать, привести пример запроса для реализации такого действия. БД MSSQL 2008. Нижу приведен sql для создания этих трех таблиц:
"Темы"
USE [Serv]
GO

/****** Object:  Table [dbo].[Темы]    Script Date: 09/26/2009 20:15:42 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

SET ANSI_PADDING ON
GO

CREATE TABLE [dbo].[Темы](
	[Id] [int] IDENTITY(1,1) NOT NULL,
	[Тема] [varchar](100) NOT NULL,
 CONSTRAINT [PK_Темы] PRIMARY KEY CLUSTERED 
(
	[Id] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

GO

SET ANSI_PADDING OFF
GO
"Вопросы"
USE [Serv]
GO

/****** Object:  Table [dbo].[Вопросы]    Script Date: 09/26/2009 20:15:21 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

SET ANSI_PADDING ON
GO

CREATE TABLE [dbo].[Вопросы](
	[Id] [int] IDENTITY(1,1) NOT NULL,
	[Текст вопроса] [varchar](max) NULL,
	[Картинка вопроса] [nvarchar](max) NULL,
	[IdТемы] [int] NOT NULL,
 CONSTRAINT [PK_Вопросы] PRIMARY KEY CLUSTERED 
(
	[Id] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

GO

SET ANSI_PADDING OFF
GO

ALTER TABLE [dbo].[Вопросы]  WITH CHECK ADD  CONSTRAINT [FK_Вопросы_Темы] FOREIGN KEY([IdТемы])
REFERENCES [dbo].[Темы] ([Id])
ON DELETE CASCADE
GO

ALTER TABLE [dbo].[Вопросы] CHECK CONSTRAINT [FK_Вопросы_Темы]
GO


"Ответы"
USE [Serv]
GO

/****** Object:  Table [dbo].[Ответы]    Script Date: 09/26/2009 20:15:47 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

SET ANSI_PADDING ON
GO

CREATE TABLE [dbo].[Ответы](
	[Id] [int] IDENTITY(1,1) NOT NULL,
	[IdВопроса] [int] NOT NULL,
	[Картинка к ответу] [nvarchar](max) NULL,
	[Текст к ответу] [varchar](2000) NULL,
	[Правильный] [bit] NOT NULL,
 CONSTRAINT [PK_Ответы] PRIMARY KEY CLUSTERED 
(
	[Id] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

GO

SET ANSI_PADDING OFF
GO

ALTER TABLE [dbo].[Ответы]  WITH CHECK ADD  CONSTRAINT [FK_Ответы_Вопросы] FOREIGN KEY([IdВопроса])
REFERENCES [dbo].[Вопросы] ([Id])
ON DELETE CASCADE
GO

ALTER TABLE [dbo].[Ответы] CHECK CONSTRAINT [FK_Ответы_Вопросы]
GO

ALTER TABLE [dbo].[Ответы] ADD  DEFAULT ((0)) FOR [Правильный]
GO


26 сен 09, 20:26    [7711893]     Ответить | Цитировать Сообщить модератору
 Re: Выбор случайных строк из БД  [new]
Ken@t
Member

Откуда: 大地
Сообщений: 3264
SELECT TOP 20 number 
FROM master..spt_values WHERE spt_values.type = 'P'
ORDER BY NEWID()
26 сен 09, 20:30    [7711897]     Ответить | Цитировать Сообщить модератору
 Re: Выбор случайных строк из БД  [new]
snake00
Member

Откуда: Кострома
Сообщений: 24
Ken@t
SELECT TOP 20 number 
FROM master..spt_values WHERE spt_values.type = 'P'
ORDER BY NEWID()

Только что опробовал твой код. Он просто выдает столбец случайных чисел, например 1976. Но в таблице вопросов возможно и не будет никогда вопроса с таким id
26 сен 09, 20:34    [7711902]     Ответить | Цитировать Сообщить модератору
 Re: Выбор случайных строк из БД  [new]
Ken@t
Member

Откуда: 大地
Сообщений: 3264
а включить мозг и выбрать из таблицы вопросов ?
26 сен 09, 20:35    [7711905]     Ответить | Цитировать Сообщить модератору
 Re: Выбор случайных строк из БД  [new]
snake00
Member

Откуда: Кострома
Сообщений: 24
Ken@t,
Пардон. Пошел пробовать :)
26 сен 09, 20:37    [7711909]     Ответить | Цитировать Сообщить модератору
 Re: Выбор случайных строк из БД  [new]
snake00
Member

Откуда: Кострома
Сообщений: 24
Ken@t,
Спасибо большое. То что нужно.
26 сен 09, 20:41    [7711917]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить