私が実装しようとしているのは、SO にあるものと似ています。前日、先月などの賛成票で投稿をランク付けしたいのですが、私のスキーマは2つのテーブルを構成しています。
post(id, post, posted_on..)
vote(post_id, vote_value, date)
スキーマがかなり自明であることを願っています。問題は、投稿と投票に内部結合を作成し、where 句 (' votes.date >= DATE_SUB(CURDATE(), INTERVAL 1 DAY
') を使用して「日ごと」に並べ替えると、意図したとおりに機能しますが、他の投稿を表示できません。つまり、最終日に投票されなかった投稿は完全に無視されます。私が望むのは、それらの投稿の優先度が低くても、クエリに表示されることです。
一方、ユニオン操作を使用することを考えるかもしれませんが、別のアプローチを探していました。
更新:1、2の2つの投稿があるとしましょう。
投票表は次のようなものです
post_id vote_value date
1 1 2012-12-19
2 1 2012-12-10
私のアプローチに従ってクエリを実行すると、日付の制約を設定したため、「1」という投稿のみが表示されますが、両方を表示したいのです。これが私のクエリです:
SELECT `id`, SUM(`votes`.`votes`) AS likes_t, `post`.* FROM `posts` JOIN `votes` ON (`id` = `votes`.`post_id`) WHERE `votes`.`date` >= DATE_SUB(CURDATE(), INTERVAL 2 DAY)