簡體   English   中英

Cakephp 3中帶有子查詢的mysql 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');

我找到一個鏈接,可以更清楚地描述我的問題。 但是此鏈接中的答案對我來說不可接受,因為我想在GROUP BY之前執行ORDER BY。 這是鏈接

這是我想要在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)

請參閱CookBook中的子查詢

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM