phpMyAdmin错误的结果计数

时间:2014-06-24 11:03:16

标签: mysql phpmyadmin

在phpMyAdmin中偶然发现了一个错误(?),虽然它更可能是我对MySQL的误解,所以希望有人可以对这种行为有所了解。

使用以下架构

CREATE TABLE IF NOT EXISTS `mlfsql_test` (
    `id` int(11) NOT NULL,
    `frequency_length` smallint(3) DEFAULT NULL,
    `frequency_units` varchar(10) DEFAULT NULL,
    `next_delivery_date` date DEFAULT NULL,
    `last_created_delivery_date` date DEFAULT NULL
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ;

INSERT INTO `mlfsql_test` 
(`id`, `frequency_length`, `frequency_units`, `next_delivery_date`, `last_created_delivery_date`) VALUES
(1, 2, 'week', '2014-06-25', NULL),
(2, 3, 'day', '2014-06-27', NULL),
(3, 1, 'week', '2014-08-08', NULL),
(4, 2, 'day', NULL, '2014-06-26');

我想根据当前设定的投放日期确定即将投放的行,或者考虑频率确定其上次投放日期。

提出以下查询,该工作正常:

    SELECT *, IF (next_delivery_date IS NOT NULL, next_delivery_date,
        CASE frequency_units
            WHEN 'day' THEN DATE_ADD(last_created_delivery_date, INTERVAL frequency_length DAY)
            WHEN 'week' THEN DATE_ADD(last_created_delivery_date, INTERVAL frequency_length WEEK)
            WHEN 'month' THEN DATE_ADD(last_created_delivery_date, INTERVAL frequency_length MONTH)
        END)
    AS next_order_due_date
    FROM mlfsql_test
    HAVING next_order_due_date IS NULL OR (next_order_due_date BETWEEN CURDATE() AND CURDATE() + INTERVAL 10 DAY)

使用表中的数据,我希望它返回3行,但phpMyAdmin表示共有4行结果,尽管它只显示3行...

picture 1

我发现如果我在查询中添加一个WHERE子句,例如WHERE 1,它会返回3行,并说明总共有3行。

enter image description here

为什么没有WHERE子句会返回错误的返回行数?我假设没有一个phpMyAdmin假设所有行都匹配,但只返回那些实际行,所以计数错了?任何帮助将不胜感激。

编辑: phpMyAdmin版本4.2.0

1 个答案:

答案 0 :(得分:2)

这似乎是phpMyAdmin v4.2.x中的一个错误。我已经打开了一张错误票(见Bug #4473)。我还向他们提出了修复此错误的方法(参见PR #1253)。您也可以在v4.2.4中应用此patch进行修复。这很可能在即将发布的bug修复版本中修复,即v4.2.5。

编辑1:我的补丁已被接受,此问题已在v4.2.5(即将发布的次要版本)中修复。