わかりました...JOIN
複数の列を選択するため、サブクエリを句に入れる必要があり、それをSELECT
句に入れると、オペランドのエラーが発生するため、それが許可されません。とにかく、これは私の質問です:
SELECT
c.id,
c.title,
c.description,
c.icon,
p.id as topic_id,
p.title AS topic_title,
p.date,
p.username
FROM forum_cat c
LEFT JOIN (
SELECT
ft.id,
ft.cat_id,
ft.title,
fp.date,
u.username
FROM forum_topic ft
JOIN forum_post fp ON fp.topic_id = ft.id
JOIN user u ON u.user_id = fp.author_id
WHERE ft.cat_id = c.id
ORDER BY fp.date DESC
LIMIT 1
) p ON p.cat_id = c.id
WHERE c.main_cat = ?
ORDER BY c.list_no
ここで重要なことは...FOR EACH
カテゴリ、各カテゴリの最新の投稿とトピックのタイトルを表示したいということです。ただし、この select ステートメントは、私の main_cat で見つかった一般的なカテゴリをループする foreach ループの内側に入ります。したがって、3 ~ 8 個のサブカテゴリを持つ 5 つのメイン カテゴリがあります。これがサブカテゴリ クエリです。しかし、サブカテゴリごとに、最新の投稿を取得する必要があります..ただし、この SELECT クエリはメイン カテゴリごとにのみ実行されるため、すべてのサブカテゴリを組み合わせた最新の投稿のみを選択します...各サブカテゴリの最新の投稿を取得したい、しかし、各サブカテゴリに対してこのクエリを実行するのではなく...ページの読み込みを高速にしたいからです。ただし、一部のサブカテゴリにはまだトピックが含まれていない可能性があるため、最新の投稿がないことを忘れないでください! したがって、左結合です。
これを行う方法を知っている人はいますか?
そして、ところで、未知の列である(WHERE ft.cat_id = c.id)
ため、サブクエリでエラーが発生します。c.id
しかし、私は外側のクエリからそれを参照しようとしているので、誰かがその問題について私を助けることができますか?
ありがとうございました!
すべてのテーブル:
forum_cat (Subcategories)
-----------------------------------------------
ID, Title, Description, Icon, Main_cat, List_no
forum_topic (Topics in each subcategory)
--------------------------------------------
ID, Author_id, Cat_id, Title, Sticky, Locked
forum_post (Posts in each topic)
--------------------------------------------
ID, Topic_id, Author_id, Body, Date, Hidden'
主なカテゴリは関数にリストされています。それらは決して変更されないため、スペースの無駄だったので、データベースに保存しませんでした。ただし、主なカテゴリは 7 つあります。