1

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


表英雄:id,name

表用户:id、name

表投票: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;

任何人都可以给我一些很好的意见?已经有一段时间了,我一直在思考这个问题,但没有解决:(

4

1 回答 1

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表的主键,那么将它放在这样的聚合结果中没有任何意义。蝙蝠侠结果将有 7voteid秒。

于 2013-04-03T18:08:29.767 回答