私は小さなRSSフィードメール送信者を開発しています。
私が持っている4つのテーブルは、Users、Feeds、Subscriptions、およびDistributionです。フィードには実際のフィードの詳細が含まれ、サブスクリプションはユーザーをフィードに接続し、配布はrssフィード投稿の電子メールトランザクションを記録します。
各ユーザー/フィードサブスクリプションの最新のレコードを取得するために、Distributionテーブルをクエリしようとしています。次のクエリがありますが、明らかに1行しか返されません。サブクエリを使用する必要がありますが、その方法に頭を悩ませることはできません。
SELECT d.id, d.user_id, d.feed_id, d.created
FROM Distribution AS d
INNER JOIN Feeds AS f ON f.id = d.feed_id
INNER JOIN Subscriptions AS s ON s.feed_id = d.feed_id
GROUP BY d.id, d.user_id, d.feed_id
ORDER BY d.created DESC
LIMIT 1
配布テーブルのデータID、作成済み、feed_id、post_id、user_id、success
(0, '2012-08-31 09:37:49', 20, 3, 2, 1)
(1, '2012-08-25 09:36:21', 20, 1, 1, 1)
(2, '2012-08-25 09:37:49', 21, 1, 2, 1)
(4, '2012-08-25 09:39:06', 21, 4, 1, 1)
(5, '2012-08-25 10:12:29', 20, 7, 2, 0)
(6, '2011-05-24 10:34:30', 20, 112, 1, 0)
次のクエリは次の結果を生成します
SELECT Distribution.*
FROM Distribution NATURAL JOIN (
SELECT user_id, feed_id, MAX(created) AS created
FROM Distribution
GROUP BY user_id, feed_id
) t
(0, '2012-08-31 09:37:49', 20, 3, 2, 1)
(1, '2012-08-25 09:36:21', 20, 1, 1, 1)
(2, '2012-08-25 09:37:49', 21, 1, 2, 1)
(4, '2012-08-25 09:39:06', 21, 4, 1, 1)