什么样的家伙?我正在尝试获取一个返回一些数据的SQL查询。 看情况:
我有一组类别,类别统一和组织,这是我的主要类别,在这些类别中我有更多子类别,例如这些子类别中的数学,舞蹈等我还有更多,例如扩展,毕业,其他等。在这些类别中,我有一些课程,我在这里称为叶子课程,例如应用数学,和/或我有另一个子类别,例如math2016.2,math2017.1等,里面可以有课程和/或其他子类别。所以你可以看到我的主要类别中可能有更多的子类别。
接下来会发生什么,我得到了2个查询,在我的第一个查询中,我只能返回我的叶子课程,换句话说,我可以返回与我的子类别扩展名直接相关的课程(这是我要返回的类别)所有课程都在里面),但是我不能在Extesion的子类别中返回课程,换句话说,我不能在math2016.2和math2017.1中返回课程。
在我的第二个查询中,我可以返回子类别math / extension / *中的所有课程,但问题是,我必须在查询中只传递一个子类别ID,换句话说,我必须传递子类别的id数学在一个查询和另一个查询中我必须传递子类别舞蹈的id,因为我有许多子类别不是这样做的。
所以我猜我的这些查询可以转换为只有一个,在一个查询中我返回所有Extension子类别中的所有课程,我该怎么做?
查询如下:
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,math是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完全不同,并且没有模式。
答案 0 :(得分:1)
你可能想要这样的东西:
SELECT ct.id, c.fullname, ct.name, ct.path
FROM mdl_course_categories ct
JOIN mdl_course_categories basecat ON basecat.id = ct.id OR ct.path LIKE CONCAT(basecat.path, '/%')
JOIN mdl_course c ON c.category = ct.id
WHERE ct.name LIKE 'Extension%'
注意:
答案 1 :(得分:0)
如果您尝试使用moodle插件获取课程,可以试试这个:
$categories = coursecat::get(0);
foreach($categories as $category) {
$courses_in_category = $category->get_courses();//You can pass an array of options also to the method.
//Process the course array
}
您还可以将一组选项传递给get_courses方法。一些选项是递归的(从子类别返回课程),排序等。
希望这有帮助