我正在尝试将结果聚合从 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
将丢失。如果 voteid
是 vote
表的主键,那么将它放在这样的聚合结果中毫无意义。 bat 侠结果中将有 7 个 voteid
。
关于android - 我如何在 SQlite/PDO 中连接表、同时聚合并将结果转换为 JSON?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15794495/