我有一个包含此架构和数据的数据库:
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似乎被打破了。此表中有几个项目具有相同的文章ID - >这里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确定相同的数据?
答案 0 :(得分:0)
您的两个查询不同 - 在一种情况下,您只是选择文章ID。另一方面,您正在选择整行。我建议你将查询写成:
SELECT ii.*
FROM fp_demand_planning_inventory_item ii
WHERE ii.articleId IN (748)
ORDER BY ii.mhd ASC
LIMIT 1;