私はしばらくの間、カスタムフォーラムに取り組んでいます。私はフォーラムから最近の投稿を表示したいと思います。私は私のUbuntuサーバーでPHP 7.0.8とMySQL 5.7.16を使用しています。なぜSQLクエリはタイムスタンプ順に左結合データを出力しないのですか?
フォーラムのデータがで収集された2つのテーブルがあります。 uap4_forum_postsとuap4_forum_post_replies
トピックがuap4_forum_postsに保存されます。 トピックの返信はuap4_forum_post_repliesに保存されます。
すべての新しいトピックとすべてのトピック返信を取得し、タイムスタンプで並べ替えることを目標にしています。私は日付でトピックを並べ替えるのに問題はありませんが、トピックの返信を追加すると、最初のトピックの返信のみが使用されます。したがって、複数のトピック返信がある場合、最新のものは表示されません。
次のように私のデータベースがセットアップされている: uap4_forum_posts ここuap4_forum_post_replies
は、私がこれまで持っているMySQLのクエリです:ここで
SELECT sub.* FROM (
SELECT
fp.forum_post_id as forum_post_id, fp.forum_id as forum_id,
fp.forum_user_id as forum_user_id, fp.forum_title as forum_title,
fp.forum_edit_date as forum_edit_date,
fp.forum_timestamp as forum_timestamp, fpr.id as id,
fpr.fpr_post_id as fpr_post_id, fpr.fpr_id as fpr_id,
fpr.fpr_user_id as fpr_user_id, fpr.fpr_title as fpr_title,
fpr.fpr_edit_date as fpr_edit_date,
fpr.fpr_timestamp as fpr_timestamp,
GREATEST(fp.forum_timestamp, COALESCE(fpr.fpr_timestamp, '00-00-00 00:00:00')) AS tstamp
FROM uap4_forum_posts fp
LEFT JOIN uap4_forum_post_replies fpr
ON fp.forum_post_id = fpr.fpr_post_id
WHERE fp.allow = 'TRUE'
) sub
GROUP BY forum_post_id
ORDER BY tstamp DESC
2016-11-08 1 3:36:46上記のデータを持つ最新のタイムスタンプでなければなりません。
ありがとうございました。これは私が取り組んでいるフリー・オープンソース・プロジェクトのためのものです。
なぜOPは「これを試してみたいですか? 「これ」との違いは何ですか? (この答えのように私には尋ねられた質問に答えてマークを逃してしまったように見えます... "*なぜ...タイムスタンプで順序付けられていないか*"(これは提案された解決策です。 「タイムスタンプで順番に」、それもその部門のミスであるようです) – spencer7593
私は機能別にグループを削除したときと同じ結果を得ました。 –