这是怎么回事?我试图得到一个SQL查询返回一些数据。 查看具体情况:SQL查询返回子类别内的所有课程
我有一套类别,类别统一和组织,这些是我的主要类别,在这些类别中我有更多的子类别。数学,舞蹈等,在这些子类别中我还有一些,例如扩展,毕业,其他等。在这些类别中,我有一些课程,我在这里称之为叶课程。应用数学,和/或我有另一个子类,例如math2016.2,math2017.1等,里面可以有课程和/或其他子类别。所以你可以看到我的主要类别中可能有更多的子类别。
接下来会发生什么,我得到2个查询,在我的第一个中,我只能返回我的叶子课程,换句话说,我可以返回直接与我的子类别相关的课程扩展(这是我想要的类别返回里面的所有课程),但是我不能在Extesion内的子类别中返回课程,换句话说,我无法返回math2016.2和math2017.1中的课程。
在我的第二个查询中,我可以返回子类别数学/扩展/ *中的所有课程,但问题是,我必须在查询中只传入一个子类别ID,换句话说,我必须传递在一个查询中的子类别数学和另一个查询我必须通过子类别的舞蹈的id,因为我有很多子类别不是trival做到这一点。
所以我想这些查询我可以被转换为只有一个,并在只有一个查询我返回所有扩展子类别内的所有课程,我该怎么做?
的查询如下波纹管:
1)一个子类别扩展
SELECT ct.id, c.fullname, ct.name, ct.path, COUNT(ct.id) AS coursecount
FROM mdl_course_categories ct
INNER JOIN mdl_course c ON c.category=ct.id
WHERE ct.name like "Extension%"
GROUP BY ct.id, ct.name, c.fullname, ct.path
ORDER BY COUNT(ct.id) DESC
2)的返回叶课程返回是一个特定子类别
SELECT ct.id, c.fullname, ct.name, ct.path, COUNT(ct.id) AS coursecount
FROM mdl_course_categories ct
INNER JOIN mdl_course c ON c.category=ct.id
WHERE ct.path like "/2/36/76%"
GROUP BY ct.id, ct.name, c.fullname, ct.path
ORDER BY COUNT(ct.id) DESC
在内部的所有课程表mdl_course_categories我有列路径,这个列有子类别的路径,例如Unity是id 2,所以路径是/ 2,数学是id 4,然后路径是/ 2/4(这意味着数学是在统一内),math2017.1是id 6,所以路径是/ 2/4/5/6
+----+------------+----------+
| id | course | path |
+----+------------+----------+
| 2 | unity | /2 |
| 4 | math | /2/4 |
| 5 | extension | /2/4/5 |
| 6 | math2017.1 | /2/4/5/6 |
+----+------------+----------+
我也不得不说,子类扩展有不同的ID给每个类别了他,那就是,扩展中的数学可以有ID为5,但延长的舞蹈里面有另一个ID完全不同,没有模式。
不,它不工作,只是重复3次的结果。我正在考虑递归地获取它,但我仍然不知道如何去做。 – crbroflovski