希望我能在这个问题上得到一些帮助。我有三张表,一张有名为 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;
花了一整天的时间,读了这么多,我的头在旋转。有人有想法么 ?
谢谢