【问题标题】:return row in row value using php PDO and MySQL使用php PDO和MySQL在行值中返回行
【发布时间】:2014-03-26 10:55:13
【问题描述】:

我目前使用的两个表格看起来像:

tasks(user1, user2)

users(id, name)

我正在执行以下查询:

SELECT * FROM tasks 
LEFT JOIN users u1 ON tasks.user1 = u1.id 
LEFT JOIN users u2 ON tasks.user2 = u2.id 

我正在使用 PHP PDO 执行查询并返回一个数组,然后我将其编码为 json,如下所示:

$query = $con->prepare($SQL);
$query -> execute();
$result = $query->fetchAll(PDO::FETCH_ASSOC);

header('Content-Type: application/json');
echo json_encode($result);

我的问题是 user2 的值会覆盖 $result 数组中的 user1 的值,有没有办法可以返回如下内容:

[{"user1": {"id": "value", "name":"value"}, "user2": {"id": "value", "name":"value"}}]

这样每个用户都是一组新数据里面的users键值。

关于如何做到这一点的任何想法?我对 PDO 还很陌生。

【问题讨论】:

    标签: php mysql sql


    【解决方案1】:

    你需要在查询中给他们不同的别名(列名):

    SELECT t.*, u1.name as name1, u2.name as name2
    FROM tasks LEFT JOIN
         users u1 ON tasks.user1 = u1.id LEFT JOIN
         users u2 ON tasks.user2 = u2.id ;
    

    【讨论】:

    • 这会返回:[{"name1": "value", "name2":"value"}] 我希望它将用户中的所有列返回到键值中,而不是分别返回跨度>
    • 这个问题是用户表中有很多列,我不想手动提取每个列,我需要一种将 u1.* 作为 name1[*] 的方法是什么?
    • 您必须单独列出所有列。您可以使用information_schema.columns 获取列列表,甚至可以使用 SQL 查询为查询 <colname> as <colname>_1, (或其他)生成 SQL。
    • 你能解释一下我如何使用 information_schema.columns 来获取 SQL 来生成查询吗?我不想手动输入它们,因为任何列更改都必须反映在代码中(不完全可维护)。谢谢。
    猜你喜欢
    • 2012-05-10
    • 2011-07-24
    • 1970-01-01
    • 2011-03-21
    • 2014-09-21
    • 1970-01-01
    • 2013-03-11
    • 1970-01-01
    • 2013-09-03
    相关资源
    最近更新 更多