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,而我需要 只有最新的 .


我尝试了什么:

  1. 所以当我尝试

    $latestPostSubject = $DB->get_record_sql('SELECT TOP(1) subject FROM {post} WHERE userid = ?', array($meUserId));
    

    Reference.

    我收到语法错误。

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

  1. post table还包含一个createdlastmodified 字段,但是当我使用 * 打印用户的整个记录​​时 从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 格式显示日期。