BETWEEN中的mysql查询搜索记录和列表(如果存在或不存在)

时间:2010-11-30 23:22:18

标签: php mysql

嗨我正在尝试制作一个查询,它将从表中运行记录,并在两年之间工作正常,但我需要列出我搜索的所有值BETWEEN

查询

select SUM(price) FROM orders where year BETWEEN 2004 and 2009 GROUP BY year
 2005 | 200
 2006 | 100
 2008 | 400

i am trying to show like this

 2005 | 200
 2006 | 100
 2007 | 0
 2008 | 400
 2009 | 0
-- ----------------------------
-- Table structure for `orders`
-- ----------------------------
DROP TABLE IF EXISTS `orders`;
CREATE TABLE `orders` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `price` decimal(10,0) DEFAULT NULL,
  `year` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=4 DEFAULT CHARSET=latin1;

-- ----------------------------
-- Records of orders
-- ----------------------------
INSERT INTO orders VALUES ('1', '200', '2005');
INSERT INTO orders VALUES ('2', '100', '2006');
INSERT INTO orders VALUES ('3', '400', '2008');

或者我是否需要在php中执行此操作以及某些循环或任何建议 谢谢你的帮助

2 个答案:

答案 0 :(得分:2)

您需要一个可以外连接的辅助数字表。如果没有永久表,你可以使用派生表。

SELECT   coalesce(SUM(o.price),0) AS price
FROM     (SELECT 2004 AS yr
         UNION ALL
         SELECT 2005
         UNION ALL
         SELECT 2006
         UNION ALL
         SELECT 2007
         UNION ALL
         SELECT 2008
         UNION ALL
         SELECT 2009
         )
         y
         LEFT JOIN orders o
         ON       y.yr = o.year
GROUP BY y.yr

答案 1 :(得分:1)

如果我理解你,你需要一份所有年份的清单,无论它们是否包含订单。

有几种方法可以做到这一点,但其中一种方法是创建另一个名为year year的表,并使用您可能需要的值填充它。

然后你可以加入这个表来获得所代表的所有年份,以及来自另一个表的总和。