0

我有两个下表

类别:(一对多-----问题)

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';

这将为您提供搜索类别名称的选项。

(顺便说一句,你用谷歌搜索过这个吗?)

编辑:给我喝了杯咖啡,但如果 a在连接的桌子上,确实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-s)都在哪里,您可以将其分开with ~(重要的是~在路径的开头和结尾也有;路径可以是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~

希望,它足够清楚,您将如何更新您的表格category以使其也有 column 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 回答