我有两张桌子
类别:(一对多-----问题)
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
如何构建选择查询来做到这一点?那可能吗?
感谢您的宝贵帮助。
答案 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')