Mam dwa stoły i staram się znaleźć "post" z najwyższym wynikiem na dzień.Grupa MySQL przez i max zwraca nieprawidłowe wiersze
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;
Próbowałem zapytanie poniżej. Zwraca prawidłowy wynik, ale pozostałe kolumny są po prostu losowymi wierszami. Co ja robię źle ?
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 za tym definicji tabeli – ManseUK
nie robisz nic złego.Funkcje agregujące nie mają wpływu na wartość innych kolumn. Wydają się być "losowe". –
Grupowanie według daty powinno generować dziwne zachowanie. – Alfabravo