0

次の2つのテーブルを取得しました

カテゴリ:(一対多-----質問)

id name  parentId
1  test1  0
2  test2  1
3  test3  1
4  test4  3 .....

木のように

test1
  test2
  test3
    test4

質問:

id   title      category_id
1   question1    1
2   ....         1
3   ....         2

私の質問は次のとおりです。カテゴリ ID = 1 を検索すると、合計の質問が表示されます。

count(question.id)
     3

それを行うために選択クエリを作成する方法は? それは可能ですか?

貴重なご協力ありがとうございます。

4

3 に答える 3

2

これは非常に単純なクエリです。

SELECT COUNT(*) FROM question WHERE category_id='1';

しかし、おそらく次のような結合クエリが必要です。

SELECT COUNT(*) FROM question INNER JOIN category 
ON (question.category_id = category.id) WHERE category.name='test1';

これにより、カテゴリ名を検索するオプションが提供されます。

(ところで、これをグーグルで検索しましたか?)

編集:コーヒーを飲みましたが、結合されたテーブルにあるLEFT JOIN場合、実際には意味がありません。します。WHEREINNER JOIN

于 2013-11-05T08:13:08.487 に答える
2

これにより、選択したカテゴリの質問の数が返されます。ここでは例を示しcategory_id = 1ます。

mysqli_query('SELECT COUNT(id) FROM question WHERE category_id = 1');

更新: したがって、サブカテゴリについてもカウントしたい場合、最も簡単な方法は、categoryすべての ID (自己 ID とすべての親の ID) になるテーブルに「パス」を含めることです。それを分離することができます。 (パスの最初と最後にもある~ことが重要~です。パスは にすることができますがVARCHAR(255)、本当に深いツリーが必要な場合は、TEXT.

id name   parentId  path
1  test1  0         ~1~
2  test2  1         ~1~2~
3  test3  1         ~1~3~
4  test4  3         ~1~3~4~

categorycolumn もあるようにテーブルを更新する方法が十分に明確であることを願っていますpath

そして選択は次のようになります:

mysqli_query('
  SELECT COUNT(id)
  FROM question
  WHERE category_id IN (
    SELECT id
    FROM category
    WHERE path LIKE "%~'.$category_id.'~%"
  )
');

$category_id質問をカウントするカテゴリの ID になります (サブカテゴリも)。

于 2013-11-05T08:08:48.627 に答える
-1

このようにしてみて、

 SELECT COUNT(id) FROM question WHERE category_id IN (SELECT id FROM question WHERE category_id='1')
于 2013-11-05T09:07:16.447 に答える