More recipes page performance optimizations (references #1750)

This commit is contained in:
Bernd Bestel 2022-01-16 16:08:57 +01:00
parent 3b3f079754
commit c190002ebb
No known key found for this signature in database
GPG Key ID: 71BD34C0D4891300
3 changed files with 29 additions and 14 deletions

View File

@ -56,7 +56,7 @@ class RecipesController extends BaseController
'fullcalendarEventSources' => $events,
'recipes' => $recipes,
'internalRecipes' => $this->getDatabase()->recipes()->where("id IN (SELECT recipe_id FROM meal_plan_internal_recipe_relation WHERE $mealPlanWhereTimespan)")->fetchAll(),
'recipesResolved' => $this->getRecipesService()->GetRecipesResolved2("recipe_id IN (SELECT recipe_id FROM meal_plan_internal_recipe_relation WHERE $mealPlanWhereTimespan)"),
'recipesResolved' => $this->getRecipesService()->GetRecipesResolved("recipe_id IN (SELECT recipe_id FROM meal_plan_internal_recipe_relation WHERE $mealPlanWhereTimespan)"),
'products' => $this->getDatabase()->products()->orderBy('name', 'COLLATE NOCASE'),
'quantityUnits' => $this->getDatabase()->quantity_units()->orderBy('name', 'COLLATE NOCASE'),
'quantityUnitConversionsResolved' => $this->getDatabase()->quantity_unit_conversions_resolved(),

28
migrations/0158.sql Normal file
View File

@ -0,0 +1,28 @@
CREATE VIEW recipes_missing_product_counts
AS
SELECT
recipe_id,
COUNT(*) AS missing_products_count
FROM recipes_pos_resolved
WHERE need_fulfilled = 0
GROUP BY recipe_id;
DROP VIEW recipes_resolved;
CREATE VIEW recipes_resolved
AS
SELECT
1 AS id, -- Dummy, LessQL needs an id column
r.id AS recipe_id,
IFNULL(MIN(rpr.need_fulfilled), 1) AS need_fulfilled,
IFNULL(MIN(rpr.need_fulfilled_with_shopping_list), 1) AS need_fulfilled_with_shopping_list,
IFNULL(rmpc.missing_products_count, 0) AS missing_products_count,
IFNULL(SUM(rpr.costs), 0) AS costs,
IFNULL(SUM(rpr.calories), 0) AS calories
FROM recipes r
LEFT JOIN recipes_pos_resolved rpr
ON r.id = rpr.recipe_id
LEFT JOIN recipes_missing_product_counts rmpc
ON r.id = rmpc.recipe_id
GROUP BY r.id;
DROP VIEW recipes_resolved2;

View File

@ -99,19 +99,6 @@ class RecipesService extends BaseService
}
}
// The same as GetRecipesResolved but without the column "missing_products_count" to improve performance when this is not needed
public function GetRecipesResolved2($customWhere = null): Result
{
if ($customWhere == null)
{
return $this->getDatabase()->recipes_resolved2();
}
else
{
return $this->getDatabase()->recipes_resolved2()->where($customWhere);
}
}
public function CopyRecipe($recipeId)
{
if (!$this->RecipeExists($recipeId))