Mysql中的递归SELECT查询?

时间:2013-11-05 08:07:24

标签: php mysql sql database

我有两张桌子

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

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

如何构建选择查询来做到这一点?那可能吗?

感谢您的宝贵帮助。

3 个答案:

答案 0 :(得分:2)

这将返回所选类别的问题计数,例如category_id = 1

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

<强>更新 所以,如果你想把它算作子类别,最简单的方法就是让#34; path&#34;在您的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~

希望,很清楚,您将如何更新表格category,以便还有列path

然后选择将是:

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

$category_id将是您要为其计算问题的类别ID(也适用于子类别)。

答案 1 :(得分: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在联合桌上,WHERE确实没有意义。 INNER JOIN

答案 2 :(得分:-1)

试试这个,

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