1

I have two tables, 'discussion' and 'discussion_responses'. A unique ID from 'discussion' is used in 'discussion_responses' to identify the response to the original post in a forum. I created the following query to extract the posts that have NEW replies, but are NOT linked to new topics. Both tables have a field for the date added and 'colname' is Dreamweaver's variable name for the visitor's last log-in date retrieved from another table:

SELECT *
FROM discussion, discussion_responses
WHERE discussion.discussion_date < colname 
AND discussion_responses.discussion_date > colname 
AND discussion.discussion_ID = discussion_responses.discussion_ID
ORDER BY discussion.discussion_title ASC

私の問題は、元の投稿に対して複数の返信があった場合、当然、そのディスカッション ID に対して複数の結果が得られることです。同じディスカッション ID を含む後続の行を削除する方法を教えてください。どのレコードが選択されても問題ありません。新しい返信が関連付けられているトピックの ID を取得するだけです。ありがとう。

4

2 に答える 2

1

これ:

SELECT  *
FROM    discussion d
WHERE   discussion_date < colname 
        AND EXISTS
        (
        SELECT  NULL
        FROM    discussion_responses dr
        WHERE   dr.discussion_date > colname 
                AND dr.discussion_ID = d.discussion_ID
        )
ORDER BY
        d.discussion_title ASC

またはこれ:

SELECT  d.*
FROM    (
        SELECT  DISTINCT discussion_ID
        FROM    discussion_responses dr
        WHERE   dr.discussion_date > colname
        )
JOIN    discussion d
ON      d.discussion_ID = dr.discussion_ID
WHERE   d.discussion_date < colname 
ORDER BY
        d.discussion_title ASC

2 番目のクエリの先頭のテーブルで使用される条件(discussion_responses)はより選択的であるため、後者のクエリはおそらく高速になります。

に索引を作成しますdiscussion_responses (discussion_date, discussion_id)

于 2010-01-20T16:16:48.267 に答える
0

ディスカッション ID だけに関心がある場合は、distinct または group by を使用できます。以下は、distinct を使用した例です。

SELECT      DISTINCT discussion_ID
FROM        discussion d
INNER JOIN  discussion_responses dr
ON          d.discussion_ID = dr.discussion_ID
WHERE       d.discussion_date < colname 
AND         dr.discussion_date > colname 

他の列にも関心がある場合は、サブクエリで個別の ID をフィルター処理します。

SELECT      *
FROM        discussion d
WHERE       d.discussion_ID IN (
    <query from above here>
)
于 2010-01-20T16:11:31.160 に答える