Moodle从数据库中读取数据:如何SELECT满足WHERE子句的第一条记录? TOP 不起作用
Moodle Reading data from Database: How to SELECT the first record which meets the WHERE clause? TOP does not work
我想检索 post 最新 博客post 特定用户的标题id
存储在 $myUserId
中。所以from this doc,我学会了这样做:
$latestPostSubject = $DB->get_record_sql('SELECT subject FROM {post} WHERE userid = ?', array($meUserId));
问题是这个 returns 用户的所有博客 post,而我需要 只有最新的 .
我尝试了什么:
所以当我尝试
$latestPostSubject = $DB->get_record_sql('SELECT TOP(1) subject FROM {post} WHERE userid = ?', array($meUserId));
我收到语法错误。
Error Reading from Database.
Debug info: You have an error in your SQL syntax; check the manual
that corresponds to your MySQL server version for the right syntax to
use near 'FROM mdl_post WHERE userid = '2'' at line 1 SELECT TOP(1) *
FROM mdl_post WHERE userid = ? [array ( 0 => '2', )]
Error code: dmlreadexception
post
table还包含一个created
和lastmodified
字段,但是当我使用 *
打印用户的整个记录时
从post
table,我没看懂日期的格式
这是一个 10 位数字 :s 否则我会计算博客 post 的创建日期。
...[lastmodified] => 1432051856 [创建] => 1432051855...
问题:
那么我应该怎么做才能从table获取最新的博客post?
其次,为什么SQL语句中的TOP(1)
不起作用?
$sql = "SELECT p.id, p.subject
FROM {post} p
WHERE p.userid = :userid
ORDER BY p.id DESC";
$params = array('userid' => $my_user_id);
$latest_post_subject = $DB->get_record_sql($sql, $params, IGNORE_MULTIPLE);
将此页面固定为参考 - https://docs.moodle.org/dev/Data_manipulation_API
Moodle 可以使用多个不同的数据库,因此 SQL 应该是通用的
实际上,如果您只想要标题,可以使用 get_field
$sql = "SELECT p.subject
FROM {post} p
WHERE p.userid = :userid
ORDER BY p.id DESC";
$params = array('userid' => $my_user_id);
$latest_post_subject = $DB->get_field_sql($sql, $params, IGNORE_MULTIPLE);
要显示日期,请使用 user_date($time) 函数。时间以 GMT 和 unix 时间存储。 user_date() 函数将以当前用户时区和 date/time 格式显示日期。
我想检索 post 最新 博客post 特定用户的标题id
存储在 $myUserId
中。所以from this doc,我学会了这样做:
$latestPostSubject = $DB->get_record_sql('SELECT subject FROM {post} WHERE userid = ?', array($meUserId));
问题是这个 returns 用户的所有博客 post,而我需要 只有最新的 .
我尝试了什么:
所以当我尝试
$latestPostSubject = $DB->get_record_sql('SELECT TOP(1) subject FROM {post} WHERE userid = ?', array($meUserId));
我收到语法错误。
Error Reading from Database.
Debug info: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'FROM mdl_post WHERE userid = '2'' at line 1 SELECT TOP(1) * FROM mdl_post WHERE userid = ? [array ( 0 => '2', )]
Error code: dmlreadexception
post
table还包含一个created
和lastmodified
字段,但是当我使用*
打印用户的整个记录时 从post
table,我没看懂日期的格式这是一个 10 位数字 :s 否则我会计算博客 post 的创建日期。
...[lastmodified] => 1432051856 [创建] => 1432051855...
问题:
那么我应该怎么做才能从table获取最新的博客post?
其次,为什么SQL语句中的TOP(1)
不起作用?
$sql = "SELECT p.id, p.subject
FROM {post} p
WHERE p.userid = :userid
ORDER BY p.id DESC";
$params = array('userid' => $my_user_id);
$latest_post_subject = $DB->get_record_sql($sql, $params, IGNORE_MULTIPLE);
将此页面固定为参考 - https://docs.moodle.org/dev/Data_manipulation_API
Moodle 可以使用多个不同的数据库,因此 SQL 应该是通用的
实际上,如果您只想要标题,可以使用 get_field
$sql = "SELECT p.subject
FROM {post} p
WHERE p.userid = :userid
ORDER BY p.id DESC";
$params = array('userid' => $my_user_id);
$latest_post_subject = $DB->get_field_sql($sql, $params, IGNORE_MULTIPLE);
要显示日期,请使用 user_date($time) 函数。时间以 GMT 和 unix 时间存储。 user_date() 函数将以当前用户时区和 date/time 格式显示日期。