2017-06-19 72 views
0

时不同的结果SQL我有这个架构和数据的数据库:主义 - 使用极小算

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 - >这里是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

你的两个查询是不同的 - 在一种情况下,你只是选择文章ID。另一方面,您正在选择整个行。我会建议编写您的查询为:

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

感谢您的快速回复。在DQL中,我可以使用 - > setMaxResults(1),但这对我的结果集没有影响。 LIMIT 1在createQuery()函数中不可用 – Torben

+0

我也尝试了Paginator,但setMaxResults(1)仅在一个实体的结果中得到结果 - 即使$ articleIds有更多ID。 – Torben