mysql - Doctrine - 使用 MIN 运算符时与 SQL 的结果不同

标签 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 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');

目前我无法创建 fiddle ,因为 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 确定相同的数据?

最佳答案

您的两个查询是不同的——在一种情况下,您只是选择文章 ID。在另一种情况下,您选择整行。我建议将您的查询写为:

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

关于mysql - Doctrine - 使用 MIN 运算符时与 SQL 的结果不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44629713/

相关文章:

php - 如何使用 PHP 在 MySQL 中显示多行?

php - 为什么这些 UPDATE 和 INSERT INTO 查询不起作用? PHP 和 MySQL

symfony - 为什么我的 Doctrine 自定义存储库认为我的实体是分离的?

php - Symfony2 & Doctrine2 : removeElement doesn't work

doctrine-orm - 教义 2 : There is no column with name '$columnName' on table '$table'

php - WordPress 安装 404 错误(无法在浏览器中查看登录信息)

mysql - 使用 lambda 时出现 Rails 3 作用域关联错误

mysql - 从 t1 中选择列,与 t2 中第 X 列的 COUNT 个、t3 中第 Y 列的 COUNT 个连接

symfony - 控制台命令中未调用监听器

php - 使用 Doctrine NativeQuery 获取单行结果