[英]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.