Mysql 条令-使用最小运算符时与SQL的结果不同

Mysql 条令-使用最小运算符时与SQL的结果不同,mysql,doctrine-orm,Mysql,Doctrine Orm,我有一个包含以下架构和数据的数据库: CREATE TABLE `fp_demand_planning_inventory_item` ( `id` int(11) NOT NULL AUTO_INCREMENT, `time` datetime NOT NULL, `articleID` int(11) NOT NULL, `orderID` int(11) NOT NULL, `quantity` int(11) NOT NULL, `mhd` datetime DE

我有一个包含以下架构和数据的数据库:

CREATE TABLE `fp_demand_planning_inventory_item` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `time` datetime NOT NULL,
  `articleID` int(11) NOT NULL,
  `orderID` int(11) NOT NULL,
  `quantity` int(11) NOT NULL,
  `mhd` datetime DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;


INSERT INTO `fp_demand_planning_inventory_item` (`id`, `time`, `articleID`, `orderID`, `quantity`, `mhd`)
VALUES
    (1,'2017-06-19 09:42:58',747,432,18,'2018-04-19 00:00:00'),
    (2,'2017-06-19 09:42:58',748,432,8,'2018-04-20 00:00:00'),
    (3,'2017-06-19 09:42:58',675,432,24,'2018-01-18 00:00:00'),
    (4,'2017-06-19 13:11:34',748,387,6,'2017-06-24 00:00:00'),
    (5,'2017-06-19 13:11:34',747,387,18,'2017-06-23 00:00:00'),
    (6,'2017-06-19 13:11:34',675,387,24,'2017-06-22 00:00:00');
目前我无法创建小提琴,因为SQLfiddle似乎已损坏。此表中有几个项目具有相同的articleID->here articleID=748(第2+4行)。我想实现始终选择最小MHD日期的结果。这里我想得到第4行的结果

但是,当我运行此查询时:

SELECT 
 ii.articleId, MIN(ii.mhd) AS min_mhd
 FROM fp_demand_planning_inventory_item ii
 WHERE ii.articleId IN (748)
 ORDER BY min_mhd ASC
我得到了结果

(4,'2017-06-19 13:11:34',748,387,6,'2017-06-24 00:00:00'),  
这是理想的结果。当我作为DQL运行此查询时,我得到以下结果:

$rows = $this->getModelManager()->createQuery('
            SELECT 
                ii, MAX(ii.mhd) AS HIDDEN min_mhd
            FROM FpDemandPlanning\Models\InventoryItem ii
            WHERE ii.articleId IN (:articleIds)
            ORDER BY min_mhd ASC
            ')
            ->setParameter('articleIds',  748)
            ->getResult();
我得到的结果是:

(2,'2017-06-19 09:42:58',748,432,8,'2018-04-20 00:00:00')

这不是期望的结果,因为这是第2行。有人知道为什么DQL的结果与SQL完全不同,我如何用DQL确定相同的数据吗?

您的两个查询是不同的——一个是选择文章id,另一个是选择整行。我建议将您的问题写为:

SELECT ii.*
FROM fp_demand_planning_inventory_item ii
WHERE ii.articleId IN (748)
ORDER BY ii.mhd ASC
LIMIT 1;

谢谢你的快速回复。在DQL中,我可以使用->setMaxResults(1),但这对我的结果集没有影响。限制1在createQuery()函数中不可用我也尝试了Paginator,但是setMaxResults(1)在这里只会导致一个实体的结果-即使$articleID有更多ID。