$condgrade = $DB->get_recordset_sql('SELECT c.fullname, gi.itemtype, gi.itemname,
gg.userid, gg.finalgrade FROM
'.$CFG->prefix.'grade_items gi
JOIN '.$CFG->prefix.'grade_grades gg ON gi.id =
gg.itemid JOIN '.$CFG->prefix.'course c ON c.id =
gi.courseid WHERE
gi.itemtype IN ("course") AND
gg.userid = '.$USER->id.'');
foreach($condgrade as $cgg)
{
$this->content->text .= html_writer::div($cgg->fullname.' : '.round($cgg->finalgrade).'%', array('class' => 'cours'));
}
是否还有其他方法可以直接从查询中检索数据,而不是像mysql一样使用foreach循环:mysql_fetch_object($users);
答案 0 :(得分:0)
获得一条记录?
$user = $DB->get_record('user', array('id' => 1));
http://docs.moodle.org/dev/Data_manipulation_API#Getting_a_single_record
编辑:除了davosmith的建议外,您还需要在第一列中拥有唯一的ID。此外,您可以使用$ DB-> get_records_sql() - 如果您需要大量数据,请使用$ DB-> get_recordset_sql()。如果您确实使用了get_recordset_sql(),那么您还需要使用$ condgrade-> valid()检查查询是否有效,并在$ condgrade-> close();
之后关闭它。$sql = "SELECT gg.id,
c.fullname,
gi.itemtype,
gi.itemname,
gg.userid,
gg.finalgrade
FROM {grade_items} gi
JOIN {grade_grades} gg ON gi.id = gg.itemid
JOIN {course} c ON c.id = gi.courseid
WHERE gi.itemtype = :itemtype
AND gg.userid = :userid";
$params = array('itemtype' => 'course', 'userid' => $USER->id);
$condgrade = $DB->get_records_sql($sql, $params);
这将返回一组记录对象。数组键将是第一列中的任何内容。例如:
$ condgrade [1] = $ recordobject;
所以你可以直接访问记录对象,例如:
使用$ condgrade [1] - > fullname
但是除非你从数据库中检索它,否则你不会知道id是什么。所以我不清楚为什么要直接访问该对象?如果你能给我一个如何直接使用它的例子,那么我可以尝试给出答案。
答案 1 :(得分:0)
$records = $DB->get_records_sql('SELECT c.fullname, gi.itemtype, gi.itemname,
gg.userid, gg.finalgrade FROM
{grade_items} gi
JOIN {grade_grades} gg ON gi.id =
gg.itemid JOIN {course} c ON c.id =
gi.courseid WHERE
gi.itemtype IN ("course") AND
gg.userid = :userid', array('userid' => $USER->id));
这将返回一组记录。
另请注意,使用{tablename}表示法,而不是手动插入$ CFG->前缀并使用':userid'绑定参数+参数列表传递为“array('userid'=> $ USER-> id)“,这有助于保护您免受SQL注入攻击。