android - 我如何在 SQlite/PDO 中连接表、同时聚合并将结果转换为 JSON?

标签 android json sqlite join pdo

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


表英雄:id,名字

表用户:id, name

投票表:voteid, userId, heroId


我通过聚合每个相等的 heroIds 获得投票结果,然后从英雄表中获取正确的英雄名称,然后发回一个 JSON 对象 看起来像这样:

{"vote":[{"voteid":"1","heroCount":"7","heroName":" bat 侠"},{"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;

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

最佳答案

您想使用 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 表的主键,那么将它放在这样的聚合结果中毫无意义。 bat 侠结果中将有 7 个 voteid

关于android - 我如何在 SQlite/PDO 中连接表、同时聚合并将结果转换为 JSON?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15794495/

相关文章:

Android:如何使用聚焦状态的按下状态绘制 ImageButton

java - 使用Gson将Json转换为Java Object

sqlite - SQLite 中的主键是否需要索引?

sql - 数据库表中的顺序

c# - EF6 为每个查询加载指定的子实体

android - sencha touch native 应用程序是否有可能仍在后台运行?

android - NavigationView OnNavigationItemSelectedListener 未被调用

java - RecyclerCardview 没有显示任何内容

json - ElasticSearch-如何限制每个组合查询的大小?

javascript - Meteor:从服务器下载网页