Я посмотрел на 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) через специальный построитель запросов;