は簡単です...が、その午前3時とイムは、おそらく明らかを見下ろします。シンプルなフォーラムをコーディングテーブルの最新レコードにどのように参加できますか?私が行って必要なもの
イム。 1つのテーブルにはフォーラムのタイトルや説明などが格納され、他のテーブルにはポストが格納されます。すべてのフォーラムのリストを示しフォーラムのリストでは、私は、各フォーラムの最新のポストをつかみ、そしてポストの件名、ポスター、ポストID、および日付を表示したいです。シンプル。
唯一の問題は、私はポストのテーブルに参加するとき、それはそのフォーラムの最後のポストを表しますテーブル内の最初のレコードではなく、最後に参加しています。ここで
は、フォーラム+(今「最初のポスト」として機能)「最新」のポストのためのデータのリストを取得する単純化されたクエリです。
SELECT forum_title, forum_id, post_subject, post_user, post_id, post_date FROM board_forums
LEFT JOIN board_posts
ON (forum_id = post_parentforum AND post_parentpost = 0)
WHERE forum_status = 1
GROUP BY forum_id
ORDER BY forum_position
どうすればこの問題を解決できますか?
私はあなたが問題を言及してくれてうれしい - 私は戻って、この質問に半ダース回来たが、それはそこに書かれていたとしても、クエリが働いていた方法を見つけ出すことができなかったので、あきらめました。 MySQLユーザではなく、GROUP BYを修正せずにスライドさせることはできませんでした。今私は知っている! :) – TML
うん。 MySQLは、あなたが何をやっているのかを知っていること、そして単一価値ルールに従っていることを信頼しています。 SQLiteも同じ動作をします。あいまいな列(グループごとに複数の値)を持つクエリを記述すると、RDBMSは任意の値を選択します。 MySQLは「最初の」行の値を(行の物理的な格納順に)選択します。偶然、SQLiteは "最後の"行から値を選択します。 –
これに少し問題があります。最高のIDを持つpost_idは必ずしも最新の投稿とは限りません。新しいスレッドが作成された場合、最新のIDを持ちます。この場合、あなたのサンプルが動作します。しかし、一度、より古いスレッド(より低いIDを持つ)で応答が行われると、それはもはやそのように機能しなくなり、最も高いIDを持つtheradを示します。 post_dateに基づいて表示する必要があります。 –