1

結果集計を Android から php にアウトソーシングしようとしています。結合テーブルを使用してクエリを正しく作成し、後で JSON でエンコードするのに問題があります。どのヒーローが一番かっこいいか投票で結果を出そうとしています。だから私はヒーロー用のテーブル、ユーザー用のテーブル、そして投票を置くテーブルを手に入れました。これは私が得たものです:


テーブル ヒーロー: id、名前

テーブル ユーザー : ID、名前

テーブル投票: 投票ID、ユーザーID、ヒーローID


私は、すべての等しい heroIds を集約して投票の結果を取得し、ヒーローテーブルから適切なヒーロー名を取得してから、次のような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なくなるけど。voteidがテーブルの主キーである場合vote、そのような集計結果に含まれていても意味がありません。voteidバットマンの結果には7 秒があります。

于 2013-04-03T18:08:29.767 に答える