繁体   English   中英

MySQL 的 SQL 查询将从数据库中获取用户名和他们的最后一条评论(每个用户一条评论)

[英]SQL query for MySQL that will fetch usernames and their last comments from the database (one comment per user)

写一个SQL查询到MySQL,它会从数据库中选择用户名和他们最后的评论(每个用户一个评论),表结构如下(SQL查询也应该显示没有评论的用户):

CREATE TABLE `db_user` (
  `db_user_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(255) NOT NULL,
  `balance` decimal(10,2) NOT NULL,
  PRIMARY KEY (`db_user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;

CREATE TABLE `db_comment` (
  `db_comment_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `db_user_id` int(10) unsigned NOT NULL,
  `text` text NOT NULL,
  PRIMARY KEY (`db_comment_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;

创建了2个表并在其中输入了一些值:

创建表db_user ( db_user_id int(10) unsigned NOT NULL AUTO_INCREMENT, name varchar(255) NOT NULL, balance decimal(10,2) NOT NULL, PRIMARY KEY ( db_user_id ) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT

INSERT INTO db_user ( db_user_id , name , balance ) VALUES ('1', 'Pavel', '5,5'); INSERT INTO db_user ( db_user_id , name , balance ) VALUES ('2', 'Alex', '6,7'); INSERT INTO db_user ( db_user_id , name , balance ) VALUES ('3', 'Maria', '7,8'); INSERT INTO db_user ( db_user_id , name , balance ) VALUES ('4', 'Mike', '4,3');

创建表db_comment ( db_comment_id int(10) unsigned NOT NULL AUTO_INCREMENT, db_user_id int(10) unsigned NOT NULL, text text NOT NULL, PRIMARY KEY ( db_comment_id ) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT;

INSERT INTO db_comment ( db_user_id , db_comment_id , text ) VALUES ('3', '1', 'Hello!'); INSERT INTO db_comment ( db_user_id , db_comment_id , text ) VALUES ('2', '2', 'Beatiful!'); INSERT INTO db_comment ( db_user_id , db_comment_id , text ) VALUES ('1', '3', 'What?'); INSERT INTO db_comment ( db_user_id , db_comment_id , text ) VALUES ('3', '4', 'Amazing!'); INSERT INTO db_comment ( db_user_id , db_comment_id , text ) VALUES ('2', '5', 'Nice!'); INSERT INTO db_comment ( db_user_id , db_comment_id , text ) VALUES ('1', '6', 'Cool!'); INSERT INTO db_comment ( db_user_id , db_comment_id , text ) VALUES ('3', '7', 'Great!'); INSERT INTO db_comment ( db_user_id , db_comment_id , text ) VALUES ('2', '8', 'OMG!'); INSERT INTO db_comment ( db_user_id , db_comment_id , text ) VALUES ('1', '9', 'Really?'); INSERT INTO db_comment ( db_user_id , db_comment_id , text ) VALUES ('4', '', '');

然后我尝试编写一个 SQL 查询:

SELECT u.name,c.text FROM db_user ùLEFT JOIN(SELECT Db_comment.db_user_id,MAX(Db_comment.db_comment_id)作为last_cid,FROM db_comment GROUP BY db_comment.db_user_id)UC ON u.db_user_id = uc.db_user_id LEFT JOIN db_comment C ON c.db_comment_id=uc.last_cid

但是有很多错误。 我是编写 SQL 查询的初学者,请告诉我如何更正确、更轻松地进行此类查询。

近似结果:

1 帕维尔 - 真的吗? 2 亚历克斯 - 天哪! 3 玛丽亚 - 太棒了! 4 Mike - ,(或发表一行“无评论”)

trying to answer but still have some issues, work in progress, interested by support too ^^


db_comment_id    db_user_id    text
1                1             Hello
2                2             Great
3                3             Awesome
4                1             NextStage
5                2             Crazy
6                1             Horrible`

________________________________________________________________________________

db_user_id    name    balance
1             joe     200.00
2             jane    350.00
3             bill    80.00
    
________________________________________________________________________________

select last_comment.*, name
    FROM db_comment last_comment

LEFT JOIN db_user ON db_user.db_user_id=last_comment.db_comment_id
LEFT JOIN db_comment new_comment
    ON last_comment.db_user_id = new_comment.db_user_id
    AND last_comment.db_comment_id<new_comment.db_comment_id
WHERE new_comment.db_user_id IS NULL
ORDER BY last_comment.db_user_id DESC LIMIT 3

________________________________________________________________________________

OUTPUT
db_comment_id    db_user_id    text        name 
3                3             Awesome     bill
5                2             Crazy       null
6                1             Horrible    null

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM