【问题标题】:How do i join tables, aggregate at same time and convert result to JSON within SQlite/PDO?如何在 SQlite/PDO 中加入表、同时聚合并将结果转换为 JSON?
【发布时间】:2013-03-25 12:58:52
【问题描述】:

我正在尝试将结果聚合从 Android 外包给 php。我无法正确地使用连接表构建查询并在之后使用 JSON 对其进行编码。我正在尝试投票选​​出最酷的英雄。所以我得到了一张给英雄的桌子,一张给用户的桌子和一张我用来投票的桌子。 好的,这就是我得到的:


表英雄:id,名称

表用户:id、名称

表格投票:voteid、userId、heroId


我通过聚合每个相等的 heroIds 来获得我的投票结果,然后 从 hero-table 中获取正确的英雄名称,然后 发回一个 JSON 对象,如下所示:

{"vote":[{"voteid":"1","heroCount":"7","heroName":"蝙蝠侠"},{"voteid":"1","heroCount":"3 ","heroName":"海王"}]}


我有点无能为力,因为我的 sqlite 知识非常有限。这是我到目前为止在我的 .php 中得到的:

$db = new PDO('sqlite:voting.sqlite');
$stmt = $db->prepare('SELECT * FROM vote');   //<---- how to do that correctly?
$stmt->execute();

$result['vote']=$stmt->fetchAll(PDO::FETCH_ASSOC);
$json=json_encode($result);

echo $json;

谁能给我一些好的意见?已经有一段时间了,我一直在思考这个问题,但没有解决:(

【问题讨论】:

    标签: android json sqlite join pdo


    【解决方案1】:

    您想使用 SQL GROUP BY 子句和 LEFT JOIN。类似于以下内容:

    SELECT hero.name AS heroName, COUNT(vote.userId) AS heroCount 
        FROM vote LEFT JOIN hero ON vote.heroId = hero.id GROUP BY hero.id
    

    如果您将其替换为 PHP 代码中的 SQL,它将生成类似于您的规范的 JSON 输出。 voteid 将会丢失。如果voteidvote 表的主键,那么在这样的聚合结果中没有任何意义。蝙蝠侠结果中将有 7 个voteids。

    【讨论】:

    • 该 voteid 仅用于识别多个不同投票的未来实现。我现在将尝试将其放入我的代码中。谢谢!!
    • 很好,现在正在解决! thx 为我节省了很多时间:D
    猜你喜欢
    • 2015-06-12
    • 1970-01-01
    • 2015-12-15
    • 2015-04-20
    • 2017-06-05
    • 1970-01-01
    • 2018-11-21
    • 1970-01-01
    • 2013-12-01
    相关资源
    最近更新 更多