この問題を解決できることを願っています。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;
これに一日中費やし、頭がぐるぐる読みすぎました。誰にもアイデアはありますか?
ありがとう