我想通过{/ 1}} id
存储在$myUserId
中的特定用户检索最新博文的博客帖子标题。所以from this doc,我学会了这样做:
$latestPostSubject = $DB->get_record_sql('SELECT subject FROM {post} WHERE userid = ?', array($meUserId));
问题是,这会返回用户的所有博客帖子,而我只需要最新的。
我做了什么:
所以当我尝试像
这样的东西时$latestPostSubject = $DB->get_record_sql('SELECT TOP(1) subject FROM {post} WHERE userid = ?', array($meUserId));
我收到语法错误。
从数据库中读取错误。
调试信息:SQL语法中有错误;检查手册 对应于您的MySQL服务器版本,以获得正确的语法 在第1行'FROM mdl_post WHERE userid ='2''附近使用SELECT TOP(1)* FROM mdl_post WHERE userid =? [array(0 =>'2',)]
错误代码:dmlreadexception
post
table还包含created
和lastmodified
字段,但是当我使用*
打印用户的整个记录时
从post
表中,我无法理解日期的格式
这是一个10位数字:s 否则我会在创建博客文章的日期做一些数学计算。
... [lastmodified] => 1432051856 [created] => 1432051855 ...
问题:
那么我该如何从表格中获取最新的博客文章?
其次,为什么SQL语句中的TOP(1)
不起作用?
答案 0 :(得分: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()函数将以当前用户时区和日期/时间格式显示日期。