add search functionality to RecipeModel

This commit is contained in:
Thomas Rubini 2023-01-20 18:30:08 +01:00
parent 7c6a5441a7
commit 5f61d15a89
No known key found for this signature in database
GPG Key ID: C7D287C8C1CAC373
2 changed files with 39 additions and 1 deletions

View File

@ -71,7 +71,10 @@ final class RecipeController
private function searchQueryView(Array $A_urlParams = null, Array $A_postParams = null, Array $A_getParams = null)
{
$A_results = array();
$O_recipeModel = new RecipeModel();
$A_results = $O_recipeModel->searchRecipesByName($A_getParams["query"]);
View::show("recipe/search", array(
"QUERY" => $A_getParams["query"],
"RESULTS" => $A_results,

View File

@ -33,4 +33,39 @@ final class RecipeModel
return $A_recipe;
}
public function searchRecipesByName($S_query)
{
$O_model = Model::get();
$stmt = $O_model->prepare("
-- split search term at space
with recursive CTE as (
select
CAST(null as char(255)) as NAME,
CONCAT(:query, ' ') as NAMES
union all
select substring_index(NAMES, ' ', 1),
substr(NAMES, instr(NAMES, ' ')+1)
from CTE
where NAMES != ''
)
-- get a row per occurrence and sort by occurrences number
select RECIPE.ID, RECIPE.NAME
from CTE
JOIN RECIPE
WHERE CTE.NAME is not null
AND INSTR(RECIPE.NAME, CTE.NAME) > 0
GROUP BY RECIPE.ID
ORDER BY count(RECIPE.ID) DESC
LIMIT 10;
");
$stmt->bindParam("query", $S_query);
$stmt->execute();
return $stmt->fetchAll();
}
}