0

この問題を解決できることを願っています。3 つのテーブルがあり、1 つには op_ideas という投稿 (アイデア) があります。op_idea_votes という別のテーブルがあります。これらは idea_id でリンクできます。

アイデアが投稿されると、人々はそのアイデアに投票できます。次に、op_idea_votes が最新の投票で更新されます。

次に、op_organs という別のテーブルを作成します。このテーブルは、投稿されたユーザー タイプによって空になる場合と空でない場合があります。したがって、このテーブルは POST_TYPE (op_organs テーブルの ID) によって op_organs.organ_id にリンクされます。

これらすべてのテーブルを選択して、表示するすべての情報を含む行を作成する必要があります。これらの情報は、idea_id と post_type でリンクする必要があります。しかし、op_idea_vote テーブルの 3 つの列に COUNT も必要です (同意する、同意しない、棄権)。

SUM(CASE を使用した UNION、SELECT に飽き飽きしましたが、期待どおりの効果が得られません。

アプリはjavascriptとPHPであるため、データベースへの呼び出しと、クエリがあるPHPファイル(ajaxを使用)への呼び出しの数を減らそうとしています。もっと良い方法があれば、私はすべて耳にします。

これはツールから作成された現在の試行ですが、空に戻りますが、エラーはありません:

SELECT
op_ideas.author_id,
op_ideas.date,
op_ideas.deptid,
op_ideas.idea_geo,
op_ideas.idea_id,
op_ideas.idea_text,
op_ideas.idea_title,
op_ideas.modifed_date,
op_ideas.post_type,
op_ideas.user_country,
op_ideas.user_county,
op_ideas.user_loc,
op_organs.organ_name,
op_organs.organ_logo,
op_organs.active,
COUNT(op_idea_vote.agree),
COUNT(op_idea_vote.disagree),
COUNT(op_idea_vote.obstain)
FROM
heroku_056eb661631f253.op_ideas op_ideas,
heroku_056eb661631f253.op_organs op_organs,
heroku_056eb661631f253.op_idea_vote op_idea_vote
WHERE
op_ideas.idea_id = op_idea_vote.idea_id AND
op_ideas.post_type = op_organs.organs_id

したがって、データは次のようになります。

+---------------------------------------------------------------- -------------------------------------------------- ------------------------------+
| idea_id | 著者ID | アイデアのタイトル | アイデアテキスト | 日付 | 同意する | 同意しない | 棄権する | 臓器名 | organ_logo
+------------------------------------------------ -------------------------------------------------- ------------------------------+
| 00001 | 10025225 | タイトル | ここにテキスト | 2012| 00005 | 0000004 | 000002 | コンプ名 | 画像/.png
+--------------------------------------------- -------------------------------------------------- ----------------------------------+

良い例ではありません。しかし、私は試しました。

こちらが最新のコードです。op_organs が null の場合でも、3 行が返されます。ただし、投票数は表示されません。

  SELECT i.*, o.organ_name, o.organ_logo
  FROM heroku_056eb661631f253.op_ideas i
  LEFT JOIN op_organs o ON i.post_type = o.organs_id
  JOIN 
    (SELECT
       COUNT(v.agree = 1 or null) as agree,
       COUNT(v.disagree = 1 or null) as disagree,
       COUNT(v.obstain = 1 or null) as abstain
       FROM op_idea_vote v, op_ideas i
       GROUP BY v.idea_id
   ) as votes;

これに一日中費やし、頭がぐるぐる読みすぎました。誰にもアイデアはありますか?

ありがとう

4

1 に答える 1

0
SELECT
    op_ideas.author_id,
    op_ideas.date,
    op_ideas.deptid,
    op_ideas.idea_geo,
    op_ideas.idea_id,
    op_ideas.idea_text,
    op_ideas.idea_title,
    op_ideas.modifed_date,
    op_ideas.post_type,
    op_ideas.user_country,
    op_ideas.user_county,
    op_ideas.user_loc,
    op_organs.organ_name,
    op_organs.organ_logo,
    op_organs.active,
    COUNT(op_idea_vote.agree = 1 or null) as agrees,
    COUNT(op_idea_vote.disagree = 1 or null) as disagrees,
    COUNT(op_idea_vote.obstain = 1 or null) as absteins
FROM
    heroku_056eb661631f253.op_ideas op_ideas,
    left join
    heroku_056eb661631f253.op_organs op_organs on op_ideas.post_type = op_organs.organs_id,
    inner join 
    heroku_056eb661631f253.op_idea_vote op_idea_vote on op_ideas.idea_id = op_idea_vote.idea_id
group by
    op_ideas.author_id,
    op_ideas.date,
    op_ideas.deptid,
    op_ideas.idea_geo,
    op_ideas.idea_id,
    op_ideas.idea_text,
    op_ideas.idea_title,
    op_ideas.modifed_date,
    op_ideas.post_type,
    op_ideas.user_country,
    op_ideas.user_county,
    op_ideas.user_loc,
    op_organs.organ_name,
    op_organs.organ_logo,
    op_organs.active
于 2012-10-13T09:38:01.127 に答える