1064 您的 SQL 语法有錯誤;检查手册...在"WHERE reviews.yes_no = yes"附近使用正确的语法



我想优化我的项目中的查询,在多次尝试使用数据表的热切加载后,我放弃了,因为根本没有减少查询。

无论如何,现在我正试图使用join来实现这一点,但问题是在DB::RAW中使用WHERE子句会给我带来以下错误:

"Exception Message:nnSQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE reviews.na_ja in ja, count(reviews.category_id) WHERE...

我的代码是这样的:

$categories = DB::table('categories')
->join('reviews', 'reviews.category_id', '=', 'categories.id')
->select([
'categories.id', 
'categories.slug', 
'categories.title', 
'categories.status', 
'categories.created_at',
DB::raw('count(reviews.category_id) AS all_reviews'),
DB::raw('count(reviews.category_id) WHERE reviews.yes_no = yes AS all_yes_reviews'),
DB::raw('count(reviews.category_id) WHERE reviews.yes_no = na AS all_no_reviews'),
])
->where('categories.deleted_at', '=', NULL)
->groupBy(['reviews.category_id', 'categories.title']);
return DataTables::of($categories)
->addColumn('action', function ($category) {
return view('admin/categories/category_actions', compact('category'));
})->make(true);

我尝试了很多建议,但都没有奏效。有人能告诉我们如何使用join来实现这一点吗?

编辑:更改顺序,将WHERE置于GROUP BY之前,错误仍然存在。错误出现在DB::raw的上

按照stackoverflow现在的传统,我必须回答自己的问题。(在6个问题中,我在5号回答了自己……我将在未来创下纪录或获得徽章(

无论如何,在我尝试了许多方法来解决我想要实现的目标后,我决定使用数据库的"去规范化"。我在categories表上添加了3列,分别是total_reviewtotal_yestotal_no,并使用BD::raw进行了如下计算:

$categories = DB::table('categories')
->select([
'categories.*',
DB::raw('round((total_yes/total_reviews)*100) as yes_percentage'),
DB::raw('round((total_no/total_reviews)*100) as no_percentage'),
])
->where('categories.deleted_at', '=', NULL);

这是使用数据库"去规范化"的一个很好的例子,但这种方法只能在像这样的特定情况下使用。

最新更新