2010-01-20 70 views
1

我有两个表,'讨论'和'讨论_响应'。 'discussion_responses'中使用来自'讨论'的唯一ID来标识论坛中原始帖子的回复。我创建了以下查询来提取具有NEW回复但未链接到新主题的帖子。这两个表已经添加了日期字段和“colname的”是Dreamweaver的从另一个表中检索为访问者的最后登陆日期变量名:减少特定字段具有相似数据的记录集。 (MySQL)

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的结果。任何人都可以请我告诉我如何消除包含相同discussion_ID的后续行?选择哪条记录并不重要,只有我可以获得与其关联的新答复的任何主题的标识。谢谢。

回答

0

如果您只是对discussion_ID感兴趣,可以使用distinct或group by。下面是具有鲜明的例子:

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> 
) 
+0

谢谢,伙计们。这很有用。 – Richard 2010-01-22 15:42:32

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 

拿铁咖啡r查询可能会更快,因为在第二个查询的引导表(discussion_responses)中使用的条件更具选择性。

创建索引discussion_responses (discussion_date, discussion_id)

相关问题