0

私は、ユーザーが多数の「ページ」から「本」を作成し、それらを好きな順序で配置できるアプリケーションに取り組んでいます。複数の人が同じ本を作成できる可能性があります (同じページを同じ順序で)。本は、処理および印刷される前にユーザーによって作成されるため、まったく同じレイアウト (同じページが同じ順序である) の本をグループ化する必要があります。これまでの人生で 100 万件のクエリを作成してきましたが、何らかの理由でこれを行う方法を理解できません。

単純に大きな SELECT クエリを作成し、結果をループ処理して、同じ順序で同じページを持つオブジェクトの配列を作成することもできますが、1 つのクエリでこれを行う方法を見つけようとしています。

ここに私のデータレイアウトがあります:

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 に答える