Tôi có hai bảng và tôi cố gắng tìm "bài đăng" có số điểm cao nhất mỗi ngày.Nhóm MySQL theo và trả về tối đa hàng sai
CREATE TABLE IF NOT EXISTS `posts_points` (
`post_id` int(10) unsigned NOT NULL,
`comments` smallint(5) unsigned NOT NULL,
`likes` smallint(5) unsigned NOT NULL,
`favorites` smallint(5) unsigned NOT NULL,
PRIMARY KEY (`post_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE IF NOT EXISTS `posts` (
`profile_id` int(10) unsigned NOT NULL,
`post_id` int(10) unsigned NOT NULL,
`pubdate_utc` datetime NOT NULL,
PRIMARY KEY (`post_id`),
KEY `profile_id` (`profile_id`),
) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC;
Tôi đã thử truy vấn bên dưới. Nó trả về số điểm chính xác nhưng các cột khác chỉ là các hàng ngẫu nhiên. Tôi đang làm gì sai?
SELECT p.post_id, p.profile_id
, MAX(t1.score)
, DATE_FORMAT(t1.pubdate_utc, '%d %b') post_date
, DATE(t1.pubdate_utc) mydate
FROM
(
SELECT p.profile_id, p.post_id, p.pubdate_utc
, (pp.comments + pp.likes + pp.favorites) AS score
FROM posts p
INNER JOIN posts_points pp ON p.post_id = pp.post_id
) t1
INNER JOIN posts p ON t1.post_id = p.post_id
AND t1.pubdate_utc = p.pubdate_utc
GROUP BY mydate
ORDER BY mydate DESC
LIMIT 18;
1 cho bao gồm định nghĩa bảng – ManseUK
Bạn sẽ không làm điều gì sai trái.Hàm tổng hợp không ảnh hưởng đến giá trị của các cột khác. Chúng sẽ xuất hiện là "ngẫu nhiên". –
Phân nhóm theo ngày phải tạo ra hành vi kỳ quặc đó. – Alfabravo