【发布时间】:2014-05-13 19:41:05
【问题描述】:
我有 3 个表都具有一对多关系
产品
id | slug |
1 | 1-a |
2 | 2-a |
3 | 3-a |
产品库
id | product_id |
1 | 1 |
2 | 1 |
3 | 2 |
产品图片
id | product_sku_id | rank |
1 | 1 | 0 |
2 | 2 | 1 |
3 | 3 | 0 |
我要做的是在单个查询中返回 Product.slug 和 Product_Image.id 排名最低的。
我现在使用的是 Doctrine,我不能在 Doctrine 的连接中使用子查询,所以我想弄清楚如何获得正确的产品图像以与产品相关联。
SELECT
p.slug,pi.id
FROM
product p
JOIN
product_sku ps
ON
p.id = ps.product_id
JOIN
product_image pi
ON
ps.id = pi.product_sku_id
GROUP BY
p.slug
使用子选择似乎是错误的:
SELECT
p.slug,pi.id
FROM
product p
JOIN
product_sku ps
ON
p.id = ps.product_id
JOIN
(SELECT
pi.*
product_image pi
ORDER BY
pi.rank ) as pi
ON
ps.id = pi.product_sku_id
GROUP BY
p.slug
到目前为止我的教义:
$this->entityManager->createQueryBuilder()
->select('DISTINCT p.slug,p.id')
->join('p.productSkus', 'ps)
->join('ps.productImages','pi');
任何帮助将不胜感激,谢谢。
编辑:这是我试图完成的一个过于简化的查询,还有很多事情不会影响问题,但需要我使用除 NATIVE SQL 之外的其他东西,我只是在 SQL 中显示我可以去上班。
【问题讨论】:
-
你能在 WHERE 子句中使用子选择吗?如果没有,请查看非常古老的 MySQL 手册(4.0 或更早版本)。这些版本不支持子选择,并且手册显示了一些看起来不太好看的提示如何做到这一点。
-
为什么需要加入产品 sku 表?我没有看到它被使用。
-
@TMcKeown 产品表和产品图片表是如何关联的
-
拜托,你能发布你的实体代码吗??
-
你试过用
$em->createQuery()代替createQueryBuilder()吗?
标签: php mysql sql symfony doctrine-orm