1

私は基本的に、カテゴリとそのサブカテゴリの配列を持つカテゴリ リストを作成しようとしています。

私の現在のクエリは次のとおりです。

SELECT category.lc_name AS name,COUNT(listings.ls_cat_id) AS post_count
FROM listings_categories AS category
LEFT JOIN listings ON listings.ls_cat_id = category.lc_id 
GROUP BY category.lc_id ORDER BY name ASC

それはかなりうまく機能しますが、サブカテゴリのアイテムまたは投稿数を親カテゴリに追加したいと思います。

例えば:

id | category | parent | Count
1      Auto        0       3
2      Auto A      1       1
3      Auto B      1       1
4      Auto C      1       1

1 つのクエリのみを使用して mysql でこれを行うにはどうすればよいですか?

テーブル構造

listings - ls_id,ls_cat_id,ls_title
listings_categories - lc_id,lc_parent,lc_name
4

2 に答える 2

1

わかりました。ここでいくつかの仮定を行いました。これは正しい場合とそうでない場合があり、スキーマとデータによって異なりますが、次のように機能するはずです。

select numListings, lc_name from
(
    SELECT
    IF(lc_parent = 0, lc_id, lc_parent) AS lc_parent_id, COUNT(ls_id) as numListings
    FROM listings_categories
    LEFT JOIN listings ON listings.ls_cat_id = listings_categories.lc_id
    group by lc_parent_id
) catList
inner join listings_categories on catList.lc_parent_id = listings_categories.lc_id;

これは次のことを前提としています。

  • カテゴリに親がない場合、lc_parent列の値は0です。
  • カテゴリには2つのレベルしかありません。親と子、孫なし
  • 親カテゴリの結果のみを表示したい

これらの仮定のいずれかが正しくない場合はお知らせください。クエリを調整できます。

于 2012-10-15T11:57:13.387 に答える
1

私はちょうど正しい答えを見つけました。

SELECT category.lc_name AS name,

COUNT(listings.ls_cat_id) + (

    SELECT COUNT(listings.ls_cat_id) FROM listings_categories AS subcategory
    LEFT JOIN listings ON listings.ls_cat_id = subcategory.lc_id
    WHERE category.lc_id = subcategory.lc_parent
) AS count

FROM listings_categories AS category
LEFT JOIN listings ON listings.ls_cat_id = category.lc_id
GROUP BY category.lc_id ORDER BY name ASC

現在のカウントを、現在のカテゴリ ID と新しい select ステートメントの親カテゴリ ID に一致する別の select ステートメントに追加しました。

"name"  "count"
"auto detailing"    "0"
"auto insurance"    "1"
"auto mechanic" "1"
"auto painting" "0"
"auto sales and parts"  "0"
"automotive"    "3"
"business"  "0"
"dental clinics"    "0"
"fashion"   "0"
"health and medicine"   "0"
"health insurance"  "0"
"home and garden"   "0"
"hospital"  "0"
"jobs and employment"   "0"
于 2012-10-16T02:59:15.907 に答える