0

そこに存在する子レコードの数を含むカテゴリのリストを取得しようとしています。カテゴリにレコードがない場合は NULL または 0 を返す必要がありますが、子レコードのあるカテゴリを返すクエリは、子レコードのないカテゴリをスキップしているように見えます。...本当に助かります。

ここに私のコードがあります:

SELECT 
t_gal.f_sub_category_id, 
t_sub_cat.f_sub_cat_name, 
t_gal.f_image_thumb, (
    SELECT COUNT(*)
    FROM t_gallery
    WHERE f_sub_category_id = t_gal.f_sub_category_id) 
    AS f_image_total
FROM    t_gallery t_gal
LEFT JOIN t_sub_category t_sub_cat ON t_sub_cat.r_id = t_gal.f_sub_category_id
GROUP BY t_sub_cat.r_id
ORDER BY t_gal.f_added_on DESC, t_gal.r_id DESC

2 つのテーブルを次に示します。

ここに画像の説明を入力

ここに画像の説明を入力

4

3 に答える 3

0

クエリの問題は、左結合を使用しているときに t_sub_category ではなく t_gallery をメイン テーブルとして使用していることです。

あなたはこれを試すことができます:sqlfiddle

select 
t_gal.f_sub_category_id, 
t_sub_cat.f_sub_cat_name, 
 (
    SELECT COUNT(*)
    FROM t_gallery
    WHERE f_sub_category_id = t_gal.f_sub_category_id) 
    AS f_image_total
from t_sub_category as t_sub_cat
left join t_gallery t_gal on t_gal.f_sub_category_id = t_sub_cat.r_id
GROUP BY t_sub_cat.r_id
ORDER BY t_gal.r_id DESC;
于 2013-03-05T13:43:07.377 に答える
0

問題は group by 句にあるようです。

LEFT JOINed テーブルにあるフィールドでグループ化しているため、そのテーブルに一致する行がないすべての行でグループ化すると、1 つの行に集約されているように見えます。

あなたが取得しようとしているのは、ギャラリー アイテムのリストと、それらが属するカテゴリ (見つかった場合)、および同じカテゴリ内の他のギャラリーの数だと思います。その場合は、次のことを試してください(そうでない場合はお知らせください!)

SELECT t_gal.f_sub_category_id, t_sub_cat.f_sub_cat_name, t_gal.f_image_thumb, Sub1.GalleryCount
FROM    t_gallery t_gal
LEFT JOIN t_sub_category t_sub_cat 
ON t_sub_cat.r_id = t_gal.f_sub_category_id
LEFT OUTER JOIN (SELECT f_sub_category_id, COUNT(*) AS GalleryCount FROM t_gallery GROUP BY f_sub_category_id) Sub1
ON Sub1.f_sub_category_id = t_gal.f_sub_category_id
ORDER BY t_gal.f_added_on DESC, t_gal.r_id DESC
于 2013-03-05T13:34:09.423 に答える
0

すべてのサブカテゴリ (以前に選択されたカテゴリの) のように見えますが、そのサブカテゴリのすべてを含めたいと考えています...そして、それらのサブカテゴリのうち、そのカテゴリの画像の数を数えたいか、またはギャラリーテーブルに画像さえありません。

あなたが遭遇した可能性があるのは、画像をカウントするために使用される FIELD の select ステートメントです...まず、パフォーマンス キラーになる可能性があります。代わりに、ギャラリー テーブルに直接左結合を実行し、対応するサブカテゴリのギャラリーから個別の R_ID をカウントすることができます。

SELECT 
      t_sub_cat.r_id,
      t_sub_cat.f_sub_cat_name, 
      MIN( COALESCE( t_gal.f_image_thumb, '' )) as JustOneThumbImg, 
      COUNT( DISTINCT( t_gal.r_id )) SubCategoryImageCount
   FROM 
      t_sub_category t_sub_cat 
         LEFT JOIN t_gallery t_gal
            ON t_sub_cat.r_id = t_gal.f_sub_category_id
   GROUP BY 
      t_sub_cat.r_id
   ORDER BY 
      t_sub_cat.f_added_on DESC

すべてのギャラリー画像を取得しているわけではないため (特定のサブカテゴリに対して一部の画像が存在しない可能性があるため)、t_gal.r_id による順序付けは意味がありません。

また、結合するサブクエリで集計を事前に取得していない理由...カテゴリに関連付けられているサブカテゴリを知らずに、すべてのカテゴリ/サブカテゴリからすべてを取得したくありません実際に欲しい。

于 2013-03-05T13:39:23.577 に答える