doukoumi3389 2016-06-15 21:49
浏览 43
已采纳

Php,MySql加入3个表并计算总数

I have 3 joined tables, and trying to pull records from it, but for some reason not able to achieve it. I have created SQL Fiddle here: http://sqlfiddle.com/#!9/9eeaf/1/0

What I'm getting now is only records that have COUNT of 1 > are shown, but I need to show all of them regardless of count being 0

CREATE TABLE `questions` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `question` varchar(150) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

INSERT INTO `questions` (`id`, `question`) VALUES
(1, 'How do you find our site?'),
(2, 'What is your favoutite color');



CREATE TABLE `options` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `question_id` int(11) NOT NULL,
  `value` varchar(250) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;


INSERT INTO `options` (`id`, `question_id`, `value`) VALUES
(1, 1, 'Hard'),
(2, 1, 'Easy'),
(3, 1, 'Very Easy'),
(4, 1, 'Piece of cake'),
(5, 1, 'Green'),
(6, 1, 'Blue'),
(7, 1, 'Red'),
(8, 1, 'Black');


CREATE TABLE `votes` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `option_id` int(11) unsigned NOT NULL,
  PRIMARY KEY (`id`),
  KEY `idx_option` (`option_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

INSERT INTO `votes` (`id`, `option_id`) VALUES
(1, 1),
(2, 1),
(3, 2),
(4, 4),
(5, 5);

SELECT 
  q.question,
  o.value,
  IFNULL(COUNT(DISTINCT v.option_id), 0) AS total 
FROM
  questions AS q 
  LEFT JOIN OPTIONS AS o 
    ON o.question_id = q.id 
  LEFT JOIN votes AS v 
    ON v.option_id = o.id 
GROUP BY v.option_id;
  • 写回答

1条回答 默认 最新

  • dongmeng1875 2016-06-15 22:13
    关注

    I think your looking for this:

    SELECT
      q.question,
      o.value,
      IFNULL(COUNT(v.option_id), 0) AS total 
    FROM
      options AS o
      LEFT JOIN votes AS v 
        ON o.id = v.option_id
      JOIN questions as q
      ON o.question_id = q.id
     GROUP BY o.id;
    

    Fiddle: http://sqlfiddle.com/#!9/9eeaf/26

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料