У меня есть простое приложение статьи с тремя таблицами:
article
id, title, body, user_id
comment
id, article_id, user_id, body
user
id, username
На целевой странице я хочу показать последние заголовки статей с указанием имени автора и общего количества комментариев к статье. Основная проблема в том, как получить общее количество комментариев к статье, я не правильно понял. Я должен получить следующий вывод:
title username total_comments
article 2 user2 0
article 1 user1 2
В моем реальном приложении я добавил столбец в таблицу статей для общего количества комментариев к статье. этот столбец обновляется при добавлении нового комментария в систему. Проблема в том, что таблица статей блокируется при добавлении нового комментария. В моем приложении много комментариев добавляются каждую минуту. Поэтому я пытаюсь избежать блокировки таблицы статей с помощью переписывания запроса SQL.
Вот некоторые данные для тестирования:
CREATE TABLE `article` (
`id` INT NULL AUTO_INCREMENT PRIMARY KEY ,
`title` VARCHAR( 100 ) NULL ,
`body` LONGTEXT NULL ,
`user_id` INT NULL
) ENGINE = MYISAM ;
CREATE TABLE `comment` (
`id` INT NULL AUTO_INCREMENT PRIMARY KEY ,
`article_id` INT NULL ,
`user_id` INT NULL ,
`body` LONGTEXT NULL
) ENGINE = MYISAM ;
CREATE TABLE `user` (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`username` VARCHAR( 50 ) NOT NULL
) ENGINE = MYISAM ;
INSERT INTO `test`.`user` (
`id` ,
`username`
)
VALUES (
NULL , 'user1'
), (
NULL , 'user2'
);
INSERT INTO `test`.`article` (
`id` ,
`title` ,
`body` ,
`user_id`
)
VALUES (
NULL , 'article 1', 'body article 1', '1'
), (
NULL , 'article 2', 'body article 2', '2'
);
INSERT INTO `test`.`comment` (
`id` ,
`article_id` ,
`user_id` ,
`body`
)
VALUES (
NULL , '1', '1', 'body comment to article 1'
), (
NULL , '1', '1', 'body comment to article 1'
);