У меня есть таблица paper
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
Идентификатор paper.id из верхней таблицы такой же, как и link_table.paper_id ввторой столЯ хочу перебрать каждую строку в верхней таблице и подсчитать, сколько раз этот его идентификатор появляется во второй таблице, и сохранить «count» в столбце «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, чтобы он был быстрее, не так ли?