首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >带条件的MySQL最新记录

带条件的MySQL最新记录
EN

Stack Overflow用户
提问于 2010-10-07 21:36:57
回答 2查看 104关注 0票数 0

我需要得到最新的记录,重复了两次以上。

结构:

代码语言:javascript
运行
复制
CREATE TABLE IF NOT EXISTS `tags` (
  `tag_n` int(10) NOT NULL AUTO_INCREMENT,
  `post_n` int(10) NOT NULL,
  `tag` varchar(30) COLLATE utf8_bin DEFAULT NULL,
  PRIMARY KEY (`tag_n`),
  KEY `tag` (`tag`),
  KEY `post_n` (`post_n`),
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

记录:

代码语言:javascript
运行
复制
SELECT * FROM tags ORDER BY post_n DESC LIMIT 0 , 30

我的问题是:

代码语言:javascript
运行
复制
SELECT tag, COUNT(post_n) AS tags_count 
FROM tags
GROUP BY tag HAVING tags_count>=2
ORDER BY post_n DESC LIMIT 5

但是我得到了错误的结果,最新的一定是"xpro",不明白哪里出了问题。

有什么想法吗?

附注:对不起,我的英语不好。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-10-09 04:50:14

解决方案:

代码语言:javascript
运行
复制
SELECT tag, COUNT(*)AS tags_count FROM
(
  SELECT post_n, tag FROM tags
  ORDER BY post_n DESC LIMIT 20
) AS temp
GROUP BY tag HAVING tags_count>=2
ORDER BY post_n DESC LIMIT 5

当然,在第一次选择时需要更改限制,否则会有很多可供选择。

另外,对不起,这个问题表达得很糟糕,我的英语很差。

票数 0
EN

Stack Overflow用户

发布于 2010-10-07 22:26:19

版本1

代码语言:javascript
运行
复制
SELECT tag, COUNT(post_n) AS tags_count ,max(post_n) as max_post_n
FROM tags
GROUP BY tag HAVING tags_count>=2
ORDER BY max_post_n DESC LIMIT 5

版本2较快选择较慢的插入。在线统计数据更新

代码语言:javascript
运行
复制
CREATE TABLE IF NOT EXISTS `tags` (
  `tag_n` int(10) NOT NULL AUTO_INCREMENT,
  `post_n` int(10) NOT NULL,
  `tag` varchar(30) COLLATE utf8_bin DEFAULT NULL,
  PRIMARY KEY (`tag_n`),
  KEY `tag` (`tag`),
  KEY `post_n` (`post_n`),
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

CREATE TABLE IF NOT EXISTS `tags_stats` (
  `tag` varchar(30),
  `tags_count` int(10) NOT NULL,
  `max_post_n` int(10) NOT NULL,
  PRIMARY KEY (`tag`)

) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_bin;


Pseudo code :

INSERT INTO tags(tag,post_n) VALUES(tag_value, post_n_value);

row = SELECT * FROM tags_stats WHERE tag=tag_value;
if not row:
    INSERT INTO tags_stats(tag,tags_count,max_post_n) VALUES(tag_value,1,post_n_value);
else:
    if row.max_post_n < post_n_value
        UPDATE tags_stats SET tags_count=tags_count+1,
          max_post_n=post_n_value WHERE tag=tag_value;
    else:
        UPDATE tags_stats SET tags_count=tags_count+1,
          WHERE tag=tag_value;
#######################################
SELECT * FROM tags_stats ORDER BY max_post_n DESC;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3882178

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档