получить данные из базы данных Moodle из кода

У меня есть вопрос о том, как я могу извлечь данные из Moodle на основе параметра, который "больше" или "меньше" заданного значения. Например, я хотел бы сделать что-то вроде:

**$record = $DB->get_record_sql('SELECT * FROM {question_attempts} WHERE questionid > ?', array(1));**

Как я могу добиться этого, потому что каждый раз, когда я пытаюсь это сделать, я получаю взамен одну запись, а не все строки, которые соответствуют этому определенному критерию.

Кроме того, как я могу заставить такой запрос работать идеально?

**$sql = ('SELECT * FROM {question_attempts} qa join {question_attempt_steps} qas on qas.questionattemptid = qa.id');**

В конце концов, я хочу получить все вопросительные знаки викторины для каждого пользователя в системе в каждой викторине.


person Raymond Mlambo    schedule 02.07.2016    source источник


Ответы (2)


Используйте $DB->get_records_sql() вместо $DB->get_record_sql, если вы хотите, чтобы возвращалось более одной записи.

person davosmith    schedule 02.07.2016
comment
Спасибо за быстрый ответ @Davosmith. Как я могу выполнить запрос на соединение, используя тот же метод? Я хочу получить данные из более чем одной таблицы в Moodle - person Raymond Mlambo; 02.07.2016
comment
Вы пишете запросы на соединение точно так же, как и в обычном SQL. SELECT fieldname1, fieldname2,... FROM table1 JOIN table2 ON... - person davosmith; 03.07.2016

Спасибо Даво за ответ тогда (2016 год, вау!). Мне удалось научиться этому со временем.

Итак, вот пример правильного запроса для получения результатов из БД Moodle с использованием операторов > или ‹:

$quizid = 100; // just an example param here
$cutoffmark = 40 // anyone above 40% gets a Moodle badge!!
$sql = "SELECT q.name, qg.userid, qg.grade FROM {quiz} q JOIN {quiz_grades} qg ON qg.quiz = q.id WHERE q.id = ? AND qg.grade > ?";

$records = $DB->get_records_sql($sql, [$quizid, $cutoffmark]);

Запрос вернет запись результатов викторины со всеми идентификаторами учащихся и оценками, у которых оценка выше 40.

person Raymond Mlambo    schedule 29.06.2018