0

我正在开发一个应用程序,该应用程序允许用户从多个“页面”构建“书”,然后按照他们想要的任何顺序放置它们。多人可以构建同一本书(相同的页面以相同的顺序)是可能的。这些书籍是在处理和打印之前由用户构建的,因此我需要将具有相同布局(相同页面以相同顺序)的书籍组合在一起。我一生中写过一百万个查询,但由于某种原因,我无法掌握如何做到这一点。

我可以简单地编写一个大的 SELECT 查询,然后循环遍历结果并构建具有相同序列的相同页面的对象数组,但我试图弄清楚如何用一个查询来做到这一点。

这是我的数据布局:

dbo.Books

BookId
Quantity

dbo.BookPages

BookId
PageId
Sequence

dbo.Pages

PageId
DocName
4

2 回答 2

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
于 2012-05-07T18:24:16.927 回答
0

所以,我需要澄清一些事情:

  • 一旦用户按照他们想要的方式订购页面,它们是否会保存回数据库?
  • 如果是,那么问题是运行查询以将具有相同页码的书籍订单分组,以便以最佳方式将它们发送到打印机?
  • 或者,用户是否布局页面,然后将订单直接发送到打印机?如果是这样,捕获请求的打印作业并在发送到打印机的途中即时订购它们似乎更复杂/效率更低......
  • 您使用什么语言/技术来创建此解决方案?。网?爪哇?

有了这些问题的答案,我就能更好地衡量你的需求。


根据我的问题的答案,我还假设:

  • 您正在使用某种类型的多对多表来存储客户页面排序。如果是这样,那么您需要编写一个查询来选择不同的页面排序,并按这些页面排序进行分组。这可以通过单个 SQL 查询来实现。
  • 但是,如果您觉得您想要更多地控制这些数据的连接方式,那么以编程方式执行此操作可能是可行的方法,尽管您会因读取所有数据而失去性能,然后以可消耗的方式输出该数据通过您的打印机。
于 2012-05-07T16:15:03.323 回答