0

希望我能在这个问题上得到一些帮助。我有三张表,一张有名为 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(同意、不同意、弃权)。

我已经厌倦了 UNION,SELECT 与 SUM(CASE,但我无法获得预期的效果。LEFT 和 INNER JOIN 但我似乎有问题,因为部分或全部信息丢失。

该应用程序使用 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

所以数据看起来像这样:

+-------------------------------------------------- -------------------------------------------------- -----------------------------------------+
| 想法ID | 作者_id | 想法标题 | 想法文本 | 日期 | 同意 | 不同意 | 弃权 | 器官名称 | organ_logo
+------------------------------------------------ -------------------------------------------------- ------------------------------+
| 00001 | 10025225 | 睾丸标题 | 文字在这里 | 2012| 00005 | 0000004 | 000002 | 公司名称 | 图像/.png
+--------------------------------------------- -------------------------------------------------- ---------------------------------+

不是一个很好的例子。但我试过了。

这是最新的代码。它带回 3 行,即使 op_organs 为空。但它没有显示票数:

  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 回答