gpt4 book ai didi

sql - 在 Doctrine 2 中做一个 WHERE .. IN 子查询

转载 作者:太空狗 更新时间:2023-10-30 01:37:44 24 4
gpt4 key购买 nike

我想从具有特定商品的所有订单中选择订单商品。在 SQL 中,我会这样做:

SELECT DISTINCT i.id, i.name, order.name 
FROM items i
JOIN orders o ON i.order_id=o.id
WHERE o.id IN (
SELECT o2.id FROM orders o2
JOIN items i2 ON i2.order_id=o2.id AND i2.id=5
)
AND i.id != 5
ORDER BY o.orderdate DESC
LIMIT 10

我如何使用查询构建器执行此查询?

最佳答案

这就是我要尝试的方式:

/** @var Doctrine\ORM\EntityManager $em */
$expr = $em->getExpressionBuilder();
$em->createQueryBuilder()
->select(array('DISTINCT i.id', 'i.name', 'o.name'))
->from('Item', 'i')
->join('i.order', 'o')
->where(
$expr->in(
'o.id',
$em->createQueryBuilder()
->select('o2.id')
->from('Order', 'o2')
->join('Item',
'i2',
\Doctrine\ORM\Query\Expr\Join::WITH,
$expr->andX(
$expr->eq('i2.order', 'o2'),
$expr->eq('i2.id', '?1')
)
)
->getDQL()
)
)
->andWhere($expr->neq('i.id', '?2'))
->orderBy('o.orderdate', 'DESC')
->setParameter(1, 5)
->setParameter(2, 5)
;

我当然没有对此进行测试,并对您的模型做出了一些假设。可能出现的问题:

  • 限制:这在 Doctrine 2 中有点问题,查询构建器似乎不太擅长接受限制。看看here , herehere .
  • IN 子句通常与数组一起使用,但我认为它可以与子查询一起使用。
  • 您可能可以使用相同的参数 ?1,而不是两个参数(因为它们的值相同),但我不确定。

总而言之,这在第一次使用时可能行不通,但肯定会让您走上正轨。之后请告诉我们最终 100% 正确的答案。

关于sql - 在 Doctrine 2 中做一个 WHERE .. IN 子查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6637506/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com