【问题标题】:mysql query search record in BETWEEN and list if exits or notmysql查询BETWEEN中的搜索记录并列出是否存在
【发布时间】:2010-11-30 23:22:17
【问题描述】:

嗨,我正在尝试进行查询,该查询将从表中运行记录,并且在两年之间它工作正常,但我需要列出我在 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 中通过一些循环或任何建议来执行此操作 感谢帮助

【问题讨论】:

    标签: php mysql


    【解决方案1】:

    您需要一个可以外部连接的辅助数字表。在没有永久表的情况下,您可以使用派生表。

    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
    

    【讨论】:

    • AS yr 必须在第一个SELECT 2004 AS yr 上吗?我一直把它放在那里。
    • @Danosaure - 是的。好收获!
    • 我只想将其命名为 year 以在联接中使用 USING (year)。我不确定它是否更有效,但我就是那么懒。
    【解决方案2】:

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

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

    然后您可以加入此表以获取所有年份以及另一个表的总和。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-17
      • 1970-01-01
      • 1970-01-01
      • 2018-11-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多