2010-11-21 18 views
0

フォーラムでこの質問が簡単に見つかる場合は、私に責任を負わせてください。私はこの問題の初心者にすぎないので、謝罪します。 Comments.parent ID = Items.IDで接続フォーラムテーブルのMS Access SQLクエリ

テーブル項目とテーブルのコメント:

私はこの2つのMS Accessのテーブルを持っています。

 
SELECT TOP 10 t4.id, t4.* FROM 
(
SELECT Items.id AS item_id , Items.*, t3.guestName , t3.modified AS comment_date 
,(SELECT count(*) FROM Comments where parentid = Items.id) as comentscount 
FROM Items 
,(SELECT t2.id as commentID, t2.guestName , t2.modified, t2.parentid FROM Comments as t2 ORDER BY t2.modified DESC ) as t3 
WHERE 
(Items.id = t2.parentid AND t3.commentID = (SELECT max(id) FROM Comments where parentid = Items.id)) 
ORDER BY Items.modified DESC 

UNION 

SELECT Items.id AS item_id, Items.* , null AS guestName, null AS comment_date, 
(SELECT count(*) FROM Comments where parentid = Items.id) as comentscount 
FROM Items 
WHERE (SELECT count(*) FROM Comments where parentid = Items.id) = 0 
) AS t4 

まあ:私はアイテムテーブルから最後の10件のレコードを表示しますクエリを必要とする

Item.id 
Item.title 
Item.text 
Item,date_modified 
count of Comments [if any] for the Item 
last Comments[if any] guestName 
last Comments[if any] date_modified 

を含む各レコードには、これまでのところ、私はこのような何かを持っています。それは働いていますが、これがもっと簡単な方法でできるかどうか私は自問し続けます。

どんな提案も歓迎されます。

ありがとうございます。

+0

FlinschとRemou、あなたの反応にどうもありがとうございました。私は若干の調整を加えなければならなかったが、あなたが送った一般的なアイデアは、私にとってとても役に立ちました。どちらの例も私のSQL知識を向上させるための正しい方向へのプッシュを与えてくれました。クエリがスムーズに機能しています。 – novice17

答えて

0
SELECT TOP 10 
Item.id, 
Item.title, 
Item.text, 
Item.modified, 
COUNT(Comment.id) AS count_of_comments, 
(SELECT TOP 1 Comment.guest_name FROM Comment WHERE Comment.parentid = Item.id ORDER BY Comment.modified DESC) AS last_guest_name, 
MAX(Comment.modified) AS last_comment_date 
FROM Item 
LEFT JOIN Comment ON Comment.parentid = Item.id 
GROUP BY Item.id 
ORDER BY Item.modified DESC 

SELECTステートメントもより適切に統合できるかどうかはわかりません。たぶんORDER BY Comments.modified DESCもあり、入れ子になったSELECTステートメントを拒否するだけで、 "選択" guest_nameができますが、わかりません。

(。私はそれをテストしていない)

+0

ありがとうFlinsch。私はこのような作業をあなたの例を持っている:10 Items.id、Items.title、Items.text、Items.modified、 COUNT(Comments.id)count_of_comments AS、 は (TOP SELECT のSELECT TOP 1 Comments.gurest_name FROMコメントWHERE Comments.parentid = Items.id ORDER BY Comment.modified DESC)AS last_guest_name、 (SELECT TOP 1 Comments.modified FROM Comments WHERE Comments.parentid = Items.id ORDER BY Comments.modified DESC) AS last_comment_date 投稿項目 LEFT JOINコメントONコメント.parentid = Items.id GROUP BY Items.id ORDER BY Items.modified DESC – novice17

0

方法の行に何かについて:

SELECT TOP 10 
     Item.id, 
     Item.title, 
     Item.text, 
     Item.date_modified, 
     c.CommentCount, 
     c.LastComment, 
     c.LastGuestName, 
     c.LastModDate 
FROM Item 
LEFT JOIN 
(SELECT ParentID, 
     Count(ParentID) As CommentCount, 
     Last(Comment) As LastComment, 
     Last(guestName) As LastGuestName, 
     Last(date_modified) As LastModDate 
FROM Comments 
GROUP BY ParentID 
ORDER BY date_modified DESC) c 
ON Item.ItemID=c.ParentID 
ORDER BY item.date_modified 
+0

Remouありがとうございます。 のSELECT TOP 10 Items.id、 Items.titel、 Items.text、 Items.modified 、c.commentsCOUNT 、c.guest 、C:私はこのような作業をあなたの例を持っています。項目からcommentDATE LEFT は(commentDATE、LAST(テキスト)コメントから AS commentsCOUNT、LAST(guestName)ゲストとして、LAST(修正)AS GROUP LAST BYのParentID ORDER(BY(のParentID)、 PARENTIDをSELECT COUNT登録しよう変更された)DESC)c ON Items.Id = c.ParentId ORDER BY items.modified DESC – novice17