我有一张表纸
CREATE TABLE `papers` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`title` varchar(1000) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL,
`my_count` int(11) NOT NULL,
PRIMARY KEY (`id`),
FULLTEXT KEY `title_fulltext` (`title`),
) ENGINE=MyISAM AUTO_INCREMENT=1617432 DEFAULT CHARSET=utf8 COLLATE=utf8_bin
和另一个表 link_table
CREATE TABLE `auth2paper2loc` (
`auth_id` int(11) NOT NULL,
`paper_id` int(11) NOT NULL,
`loc_id` int(11) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
上表中的 id paper.id 与第二表中的 link_table.paper_id 相同。我想迭代上表中的每一行,并计算其 id 在第二个表中出现的次数,并将“计数”存储到上表中的“my_count”列中。
示例:如果 tid = 1 = paper_id 的论文在表 link_table 中出现 5 次,则 my_count = 5。
我可以通过 Python 脚本来做到这一点,但它会导致太多查询,而且我有数百万个条目,所以速度非常慢。我无法找出正确的语法来在 MySQL 中实现这一点。
这就是我在 Python 的 for 循环中迭代的内容(太慢了):
SELECT count(link_table.auth_id) FROM link_table
WHERE link_table.paper_id = %s
UPDATE papers SET auth_count = %s WHERE id = %s
有人可以告诉我如何创建这个吗?必须有一种方法可以将其嵌套并直接放入 MySQL 中,这样速度更快,不是吗?