mysql Cakephp 3 中带有子查询的 FROM 子句
mysql FROM clause with subquery in Cakephp 3
我想在 cakephp 3 中将子查询与主查询一起使用。如我所见 ,这很容易理解。但是我想在 mysql FROM 子句中使用子查询。即 "SELECT * FROM (SELECT * FROM table_name)"。但我对它的语法一无所知。如果有人曾经在 cakephp 3 中尝试过这个,那么将不胜感激。这是一些我试过但对我不起作用的代码。
$purchases = TableRegistry::get('Purchases');
$sublastitem = $purchases->find()
->select([
'id',
'customer_id',
'item'
])
->where(function ($exp, $q) use($custids)
{
return $exp->in('customer_id', ['1','2']);
})
->order(['id' => 'DESC']);
以上是我想在 FROM 子句中使用的子查询。
而且这些代码我都试过了(注释行都试过了,其他的都试过了)
// $lastitem = $sublastitem->find();
// $lastitem = $purchases->find($sublastitem);
// $lastitem = $purchases->all($sublastitem);
$lastitem->select([
'id',
]);
$lastitem->group('customer_id');
我发现 link 更清楚地描述了我的问题。但是这个 link 中的答案对我来说是不可接受的,因为我想在 GROUP BY 之前执行 ORDER BY。这里是link
这是我在 Cakephp 3 中想要的查询。
SELECT * FROM (SELECT 'id', 'customer_id', 'item' FROM purchases WHERE customer_id IN (1, 2) ORDER BY id) t GROUP BY customer_id
您必须创建两个单独的查询对象。
这意味着您将不得不使用类似于以下的语法:
$matchingUsers = $users->find('all')->select('id');
$matchingPaurchases = $purchases->find('all')->where(['user_id' => $matchingUsers]);
这将创建如下内容:
SELECT purchase_id, purchase_price, purchase_item_id FROM purchases WHERE user_id IN(1,2,3,4,5)
参见食谱SubQueries
我想在 cakephp 3 中将子查询与主查询一起使用。如我所见
$purchases = TableRegistry::get('Purchases');
$sublastitem = $purchases->find()
->select([
'id',
'customer_id',
'item'
])
->where(function ($exp, $q) use($custids)
{
return $exp->in('customer_id', ['1','2']);
})
->order(['id' => 'DESC']);
以上是我想在 FROM 子句中使用的子查询。
而且这些代码我都试过了(注释行都试过了,其他的都试过了)
// $lastitem = $sublastitem->find();
// $lastitem = $purchases->find($sublastitem);
// $lastitem = $purchases->all($sublastitem);
$lastitem->select([
'id',
]);
$lastitem->group('customer_id');
我发现 link 更清楚地描述了我的问题。但是这个 link 中的答案对我来说是不可接受的,因为我想在 GROUP BY 之前执行 ORDER BY。这里是link
这是我在 Cakephp 3 中想要的查询。
SELECT * FROM (SELECT 'id', 'customer_id', 'item' FROM purchases WHERE customer_id IN (1, 2) ORDER BY id) t GROUP BY customer_id
您必须创建两个单独的查询对象。 这意味着您将不得不使用类似于以下的语法:
$matchingUsers = $users->find('all')->select('id');
$matchingPaurchases = $purchases->find('all')->where(['user_id' => $matchingUsers]);
这将创建如下内容:
SELECT purchase_id, purchase_price, purchase_item_id FROM purchases WHERE user_id IN(1,2,3,4,5)
参见食谱SubQueries