php - 在 json 响应中显示 2 个 id

标签 php mysql json pdo

每当我将 subjects.id 添加到查询中的选择时,

subjects.id 将覆盖 JSON 响应中的 users.id

我如何在响应中显示我的 users.idsubject.id

    $sql = "SELECT users.id,users.name,users.date,subjects.id FROM tb_user AS users INNER JOIN 
   tb_subjects AS subjects ON users.id = subjects.userid WHERE users.id = '$userid'";

    try {
        $db = new db();
        $db = $db->connect();
        $stmt = $db->prepare($sql);

        $stmt->execute();

        $user = $stmt->fetch(PDO::FETCH_OBJ);

        $db = null;

        if(empty($user)) {
            $response->getBody()->write
            ('
            {
                "error":
                {
                    "message":"Invalid"
                }
            }');
        } else {
            $response->getBody()->write(json_encode($user));
        }
    } catch(PDOException $e) {}

电流输出

{
"id": "1",
"name": "joe",
"date": "2017-07-22 18:37:37"
}

预期输出

{
"id": "1",
"name": "joe",
"subjectid": "4",
"date": "2017-07-22 18:37:37"
}

最佳答案

要解决包含两个 id 列的结果集的问题,请为主题 id 列指定 subjectid 的别名:

SELECT
    users.id,
    users.name,
    users.date,
    subjects.id AS subjectid
FROM tb_user AS users
INNER JOIN tb_subjects AS subjects
    ON users.id = subjects.userid
WHERE users.id = '$userid'

大多数数据库似乎都可以容忍包含两列同名的结果集。但是,如果它发生在您试图同时选择该重复列的子查询中,这将失败。看起来 PHP 只是决定选择 id 列之一,尽管这里最好的办法是修复查询中的重复名称问题。

编辑:

如果您想获取最新的主题,如其 time 列所示,您可以稍微修改您的查询以使用另一个连接:

SELECT
    users.id,
    users.name,
    users.date,
    s1.id AS subjectid
FROM tb_user AS users
INNER JOIN tb_subjects s1
    ON users.id = s1.userid
INNER JOIN
(
    SELECT userid, MAX(time) AS max_time
    FROM tb_subjects
    GROUP BY userid
) s2
    ON s1.userid = s2.userid AND
       s1.time   = s2.max_time     
WHERE users.id = '$userid'

新联接中的子查询为每个用户查找最近的时间。但这仍然没有给我们真正想要的主题 id。为此,我们可以访问第一个 tb_subjects 表,但是在这个新连接之后该表已减少为仅包含具有最新消息时间的记录。这里有一个警告:如果您对最近的消息有领带,我的查询将返回所有此类领带。我们可以解决这个问题,但这需要更多工作。

关于php - 在 json 响应中显示 2 个 id,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45995331/

相关文章:

javascript - 复杂的分组和合并数组作为属性

php - Laravel 原始查询 - 运行此查询不会选择 id

mysql - MySQL 中的套接字和端口连接有什么区别?

python - Mysqldb 未安装在使用 pycharm 的 Flask 应用程序中

PHP 检查密码脚本不适用于多个用户

php - 错误域=NSCocoaErrorDomain 代码=3840 "No value."

javascript - 将多个excel文件转换为json

php - 为什么 'today' 在日期结束时返回额外的分钟数

php - 从 URL(自己网站的)获取 HTML 内容

phpMyAdmin 截断错误消息