Имам документи за маса
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 papers.id от горната таблица е същият като link_table.paper_id във втората таблица. Искам да премина през всеки ред в горната таблица и да преброя колко пъти този идентификатор се появява във втората таблица и да съхраня "броя" в колоната "my_count" в горната таблица.
Пример: Ако хартията с tid = 1 = paper_id се появи 5 пъти в таблицата link_table, тогава my_count = 5.
Мога да направя това чрез скрипт на Python, но това води до твърде много заявки и имам милиони записи, така че е наистина бавно. И не мога да разбера правилния синтаксис, за да направя това точно вътре в MySQL.
Това е, за което повтарям във for-цикъл в Python (твърде бавен):
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, така че да е по-бързо, нали?