Moodle вставляет данные из выбора другой таблицы - PullRequest
0 голосов
/ 04 мая 2019

Я посмотрел на API манипуляции с данными moodle и обнаружил, что могу вставить значение с помощью $DB->insert_records и выбрать с помощью $DB->get_records_sql, но в моем случае у меня есть таблица с именем block_userlist :

+------------------+------------+------+-----+---------+----------------+
| Field            | Type       | Null | Key | Default | Extra          |
+------------------+------------+------+-----+---------+----------------+
| id               | bigint(10) | NO   | PRI | NULL    | auto_increment |
| user_id          | bigint(10) | NO   |     | NULL    |                |
| logout_time      | bigint(10) | YES  |     | NULL    |                |
| login_time       | bigint(10) | NO   |     | NULL    |                |
| session_duration | bigint(10) | YES  |     | NULL    |                |
+------------------+------------+------+-----+---------+----------------+

И я хочу заполнить его из следующих полей из user one:

+------------------+------------+------+-----+---------+----------------+
| Field            | Type       | Null | Key | Default | Extra          |
+------------------+------------+------+-----+---------+----------------+
| id                | bigint(10)   | NO   | PRI | NULL | auto_increment |
| currentlogin      | bigint(10)   | NO   |     | 0    |                |
| lastaccess        | bigint(10)   | NO   | MUL | 0    |                |
+------------------+------------+------+-----+---------+----------------+

Вот так:

block_userlist.user_id <= user.id
block_userlist.login_time <= user.currentlogin
block_userlist.logout_time <= user.lastaccess
block_userlist.session_duration <= user.lastaccess - user.currentlogin

Следовательно, я мог бы использовать $DB->get_records_sql через php для получения результатов и через $DB->insert_records вставить их обратно, но это привело бы к некоторому обмену данными между веб-сайтом и базой данных, в то время как многие СУБД могли вставлять значения в одну таблицу из запроса на выборку другого например, в моем случае, если бы у меня был MySQL, я мог бы сделать:

INSERT INTO block_userlist(user_id,logout_time,login_time,session_duration) SELECT user.id,user.lastaccess,user.currentlogin, (user.lastaccess - user.currentlogin) from user;

Поэтому я хочу спросить:

  • Есть ли способ выполнить запрос Insert-select без обращения к php; или
  • Есть ли способ создать пользовательский запрос Cross-Db (для любых СУБД, поддерживаемых moodle) через специальный построитель запросов;
...