Php、MySql连接3个表并统计总计

标签 php mysql join

我有 3 个连接表,并尝试从中提取记录,但由于某种原因无法实现。我在这里创建了 SQL Fiddle:http://sqlfiddle.com/#!9/9eeaf/1/0

我现在得到的只是显示 COUNT 为 1 > 的记录,但我需要显示所有记录,无论计数是否为 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;

最佳答案

我认为您正在寻找这个:

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

关于Php、MySql连接3个表并统计总计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37846379/

相关文章:

Mysql OR/AND 查询

mysql 关注和转推功能

mysql - 按最大日期分组 3 个表

R - 有没有办法通过实际合并同名列来连接两个数据框?

php - 如何使用内连接?

php - 从 laravel 中包含的 Blade 获取 Blade 中的变量

php - ISSET PHP mysql

php - 将数据库 ID 混淆为面向客户的号码

php - 无法申请进程槽

java - Jboss mysql 数据源