2012-05-07 1 views
0

Я работаю над приложением, которое позволяет пользователям создавать «книгу» с нескольких «страниц», а затем размещать их в любом порядке, который им нужен. Возможно, что несколько человек могут создать одну и ту же книгу (одни и те же страницы в том же порядке). Книги создаются пользователем до того, как они будут обработаны и распечатаны, поэтому мне нужно объединить книги вместе, которые имеют одинаковый точный макет (одни и те же страницы в том же порядке). Я написал миллион запросов в своей жизни, но по какой-то причине я не могу понять, как это сделать.Как я могу группировать объекты, полученные из таблиц базы данных, которые имеют одинаковые свойства?

Я мог бы просто написать большой запрос SELECT, а затем пропустить результаты и собрать массивы объектов, которые имеют одинаковые страницы в одной последовательности, но я пытаюсь выяснить, как это сделать с помощью одного запроса.

Вот мой макет данных:

dbo.Books 

BookId 
Quantity 

dbo.BookPages 

BookId 
PageId 
Sequence 

dbo.Pages 

PageId 
DocName 
+0

Что такое 'Books.Quantity'? Количество страниц? –

+0

Transact-SQL - Sybase или SQL Server? Если последний, какая версия? –

+0

IBM midrange iSeries –

ответ

0

Итак, мне нужно некоторые разъяснения несколько вещей:

  • Как только пользователь заказов страницы так, как они хотят, они сохраняются вниз в базу данных?
  • Если да, то возникает вопрос о выполнении запроса для упорядочивания заказов на книги, которые имеют одинаковую нумерацию страниц, так что они будут отправлены на принтеры оптимальным образом?
  • ИЛИ, делает ли пользователь расположение страниц, а затем отправляет заказ непосредственно на принтер? И если это так, кажется более сложным/менее эффективным для захвата запрошенных заданий на печать и заказывайте их на лету по пути к принтерам ...
  • Какой язык/технология вы используете для создания этого решения? .СЕТЬ? Ява?

С ответами на эти вопросы я могу лучше оценить, что вам нужно.


С ответами на мои вопросы, я также предполагаю, что:

  • Вы используете некоторый тип многие ко многим таблицы для хранения страницу заказа клиента. Если это так, тогда вам нужно будет написать запрос, чтобы выбрать различные упорядочения страниц, и группировать по этим страницам. Это возможно с помощью одного SQL-запроса.
  • Однако, если вы чувствуете, что хотите больше контролировать, как эти данные объединяются, тогда это может быть программным способом, хотя вы потеряете производительность, прочитав все данные, а затем выведите эти данные таким образом который потребляется вашими принтерами.
+0

«Как только пользователь заказывает страницы так, как они хотят, они сохраняются обратно в базу данных?»: ДА «Если да, то возникает вопрос о запуске запроса для упорядочивания заказов в группе, которые имеют одинаковую нумерацию страниц, чтобы они были отправлены на принтеры оптимальным образом?": YES " Какой язык/технология вы используете для создания этого решения? .СЕТЬ? Java? »: ColdFusion/IBM iSeries –

0

Книги идентичны, только если счетчик страниц = совпадение.

Он был отмечен TSQL, когда я начал. Это может быть не тот же синтаксис SQL.

;WITH BookPageCount 
AS 
(
    select b1.bookID, COUNT(*) as [individualCount] 
    from book b1 with (nolock) 
    group by b1.bookID 
), 
BookCombinedCount 
AS 
(
    select b1.bookID as [book1ID], b2.bookID as [book2ID], COUNT(*) as [combindCount] 
    from book b1 with (nolock) 
    join book b2 with (nolock) 
    on b1.bookID < b2.bookID 
    and b1.squence = b2.squence 
    and b1.page = b2.page 
    group by b1.bookID, b2.bookID 
) 
select BookCombinedCount.book1ID, BookCombinedCount.book2ID 
from BookCombinedCount 
join BookPageCount as book1 on book1.bookID = BookCombinedCount.book1ID 
join BookPageCount as book2 on book2.bookID = BookCombinedCount.book2ID 
where BookCombinedCount.combindCount = book1.individualCount 
    and BookCombinedCount.combindCount = book2.individualCount.PageCount 
Смежные вопросы