Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在SQL表中整理dublettes_Sql_Mysql - Fatal编程技术网

在SQL表中整理dublettes

在SQL表中整理dublettes,sql,mysql,Sql,Mysql,我在下面给出了我真正问题的一个解释: 设想一个网站显示文章,所有文章都有与之相关的评论。现在我想得到那些评论超过某个日期的文章,比如说2011-02-02。我还想得到最接近2011-02-02的评论。不要忘记,每篇文章都有不止一条与之相关的评论。我希望这在一个SQL查询中发生 我发现很难解释我的问题,所以我给出了SQL代码: SELECT articles.*, comments.date AS date FROM articles, comments WHERE comments.commen

我在下面给出了我真正问题的一个解释:

设想一个网站显示文章,所有文章都有与之相关的评论。现在我想得到那些评论超过某个日期的文章,比如说2011-02-02。我还想得到最接近2011-02-02的评论。不要忘记,每篇文章都有不止一条与之相关的评论。我希望这在一个SQL查询中发生

我发现很难解释我的问题,所以我给出了SQL代码:

SELECT articles.*, comments.date AS date
FROM articles, comments
WHERE comments.commentId in (SELECT commentId
                             FROM   comments
                             WHERE  date > 2011-02-02
                             ORDER BY date asc
                             LIMIT 1)
ORDER BY comments.date desc

问题在于SQL查询的成员部分。因为它只返回一行。我希望每篇文章都能出现这种情况

您只需查询大于日期的评论,返回文章ID您确实有一个标准化的结构,对吗?没有任何细节很难说


要查找与日期最接近的注释,请按注释日期按升序排序数据,然后取第一个。

您只需查询大于日期的注释,返回文章ID您确实有一个标准化的结构,对吗?没有任何细节很难说

select top 1 a.* from articles a
inner join comments c on c.articleid = a.id
where c.date > '2011-02-02'
order by c.date asc
若要查找最接近日期的注释,请按注释日期按升序排序数据,然后取第一个

select top 1 a.* from articles a
inner join comments c on c.articleid = a.id
where c.date > '2011-02-02'
order by c.date asc
虽然我对MySQL不是非常熟悉,但这应该可以做到


虽然我对MySQL不太熟悉,但应该可以做到这一点。

使用子查询。不幸的是,你们的问题并没有给我太多关于模式的信息……所以我会边做边发明。假设您有一个表“Article”,其中Article_id作为主键,而您的另一个表是Article_id上的comments链接。我假设Article_id+date使注释唯一

Select article.article_id, comment.comment_text,comment.comment_date from article
inner join (select min(comment_date) 'comment_date', article_id 
           from comment 
           where comment_date < '2010-02-02' 
           group by article_id) c 
       on c.article_id = article.article_id
inner join comment on comment.article_id = c.article_id and c.comment_date = comment.comment_date
可以将子查询用作联接中的表。使用子查询隔离所需的单个注释,然后连接回注释表以获取注释文本。希望这是有道理的。我没有MYSQL数据库来测试这一点,但我认为语法应该至少在MSSQL上起作用


编辑格式。您可以在此查询底部包含where语句,以筛选您想要查看的文章。

使用子查询。不幸的是,你们的问题并没有给我太多关于模式的信息……所以我会边做边发明。假设您有一个表“Article”,其中Article_id作为主键,而您的另一个表是Article_id上的comments链接。我假设Article_id+date使注释唯一

Select article.article_id, comment.comment_text,comment.comment_date from article
inner join (select min(comment_date) 'comment_date', article_id 
           from comment 
           where comment_date < '2010-02-02' 
           group by article_id) c 
       on c.article_id = article.article_id
inner join comment on comment.article_id = c.article_id and c.comment_date = comment.comment_date
可以将子查询用作联接中的表。使用子查询隔离所需的单个注释,然后连接回注释表以获取注释文本。希望这是有道理的。我没有MYSQL数据库来测试这一点,但我认为语法应该至少在MSSQL上起作用


编辑格式。您可以在此查询的底部包含where语句,以筛选您想要查看的文章。

您是指评论日期大于某个日期的文章吗?您的数据是如何结构化的?如果你有,比如说文章id、评论id和评论日期的列,其中评论id与文章id关联,并且每个评论id都有一个唯一的评论日期,你可以简单地从[任何一个或多个表…可能必须进行连接]中选择文章id,其中评论日期>='20110202'。我想我的问题问错了。看看新的,你是指那些评论日期大于某个日期的文章吗?您的数据是如何结构化的?如果你有,比如说文章id、评论id和评论日期的列,其中评论id与文章id关联,并且每个评论id都有一个唯一的评论日期,你可以简单地从[任何一个或多个表…可能必须进行连接]中选择文章id,其中评论日期>='20110202'。我想我的问题问错了。看看这个新的,很难解释我的问题,所以我举了一个SQL代码的例子。我想你误解了我的意思,因为很难解释我的问题,所以我举了一个SQL代码的例子。我想你误解了我的意思,如果这很容易,我没有问,但是的,它是正常的。很难解释我的问题,所以我给出了一个SQL代码示例。我想你误解了我的意思,如果这很容易,我没有问,但是的,它是正常的。很难解释我的问题,所以我给出了一个SQL代码示例。我想你误解我了