我有三個表簡單的文章應用:的MySQL與另一個表的計數查詢選擇
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'
);
的TOTAL_COMMENTS將包含鏈接到文章 –
所有評論計數你的答案是正確的,但因爲沒有使用索引的查詢是很慢的。我不知道如何爲這個查詢選擇正確的索引。感謝 –
在'comments.article_id','articles.user_id'上添加索引並查看它是否改進 –