繁体   English   中英

MySQL有条件的最新记录

[英]MySQL latest records with condition

我需要获取最新记录,这些记录要重复两次以上。

结构体:

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;

记录:

SELECT * FROM tags ORDER BY post_n DESC LIMIT 0 , 30

替代文字

我的查询:

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”,无法理解是什么错误。

有任何想法吗?

ps对不起我的英语。

版本1

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 Faster SELECT较慢的插入。 统计信息在线更新

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;

解:

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

当然,在第一个选择中需要更改限制,否则会有很多选择。

PS对不起,这是一个措辞不好的问题,我的英语不好。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM