需要Laravel查询转换

时间:2019-03-27 21:02:57

标签: mysql laravel laravel-5 query-builder laravel-query-builder

我需要将以下mysql查询转换为laravel查询生成器:

            SELECT id.product_id FROM
            (
                SELECT product_id, count(i.product_id) as t, c.filter_group as b
                FROM
                (
                    SELECT f.filter_id, f.product_id, p.filter_group_id
                    FROM ". DB_PREFIX ."product_filter f
                    left join ". DB_PREFIX ."filter p ON p.filter_id = f.filter_id
                    where p.filter_id IN 
                        (1, 4, 5, 3)
                    GROUP BY product_id , filter_group_id
                ) 
                as i,
                (
                    select count(distinct filter_group_id) as filter_group
                    from ". DB_PREFIX ."filter_description f_b
                    WHERE f_b.filter_id in (1, 4, 5, 3)
                ) 
                as c GROUP BY product_id HAVING t = b
            )
            as id

到目前为止,我已经完成了:

$query = DB::select('id.product_id')
                        ->fromSub(function ($query) {
                            $query->select('product_id', DB::raw('COUNT(i.product_id) AS t'), 'c.filter_set AS b')
                                    ->fromSub(function ($query) {
                                        $query->select('f.filter_id', 'f.product_id', 'p.filter_set_id')
                                            ->from(config('db.tables.EcomRelationProductFilters').' AS f')
                                            ->leftJoin(config('db.tables.EcomFilters').' AS p', 'p.filter_id', '=', 'f.filter_id')
                                            ->whereIn('p.filter_id', $filter_ids)
                                            ->groupBy('product_id', 'filter_set_id');
                                    }, 'i')
                                    ->fromSub(function ($query) {
                                        $query->select(DB::raw('COUNT(distinct filter_set_id) AS filter_set'))
                                            ->from(config('db.tables.EcomFilterDetails').' AS f_b')
                                            ->whereIn('f_b.filter_id', $filter_ids);
                                    }, 'c')
                                    ->groupBy('product_id')
                                    ->having('t', '=', 'b');
                        }, 'id')->toSql();

但是我对此有疑问,它说我的查询中有语法错误。

已更新: 我得到的确切错误:

SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'id.product_id' at line 1 (SQL: id.product_id)

0 个答案:

没有答案
相关问题