【问题标题】:MySQL Selecting countMySQL 选择计数
【发布时间】:2009-08-28 05:26:31
【问题描述】:

我有两个表:codes_tags 和 popular_tags。

codes_tags

CREATE TABLE `codes_tags` (
 `code_id` int(11) unsigned NOT NULL,
 `tag_id` int(11) unsigned NOT NULL,
 KEY `sourcecode_id` (`code_id`),
 KEY `tag_id` (`tag_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

popular_tags

CREATE TABLE `popular_tags` (
 `id` int(10) unsigned DEFAULT NULL,
 `count` int(10) unsigned DEFAULT NULL,
 KEY `id` (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8

对不起,如果这个问题有点基本,但这是我想要做的。我正在尝试从 code_tags 中选择 10 个 tag_id - 这些标签将是副本最多的 10 个(例如,可能有 30 条 tag_id 为 7 的记录,因此如果这是最高的之一,则将选择 7) .然后我将两个值插入到 popular_tags 中:tag_id 和该标签的标签计数。

我该怎么做?

【问题讨论】:

  • 我知道这与您的问题无关,但您为什么要在一张表上使用 InnoDB 而在另一张表上使用 MyISAM?

标签: mysql select insert count


【解决方案1】:

类似的东西:

insert into popular_tags (id, `count`)
select
    tag_id,
    count(*),
from codes_tags
group by
    tag_id
order by
    count(*) desc
limit 10

【讨论】:

  • 我只落后你 20 秒......我认为你可能需要在 count 列周围加上反引号,这样 mysql 就不会将它与函数调用混淆并引发语法错误。不过还没有检查。
  • 感谢您提及,我不太确定!我经常在 SQL Server 和 MySQL 之间跳来跳去 :)
【解决方案2】:
INSERT INTO popular_tags (id, `count`)
SELECT tag_id, count(*) FROM codes_tags 
GROUP BY tag_id ORDER BY count(*) DESC LIMIT 10

【讨论】:

    猜你喜欢
    • 2012-03-05
    • 2017-01-28
    • 1970-01-01
    • 1970-01-01
    • 2011-11-14
    • 2018-03-12
    • 2015-07-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多