add search functionality to RecipeModel
This commit is contained in:
parent
7c6a5441a7
commit
5f61d15a89
@ -71,7 +71,10 @@ final class RecipeController
|
|||||||
|
|
||||||
private function searchQueryView(Array $A_urlParams = null, Array $A_postParams = null, Array $A_getParams = null)
|
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(
|
View::show("recipe/search", array(
|
||||||
"QUERY" => $A_getParams["query"],
|
"QUERY" => $A_getParams["query"],
|
||||||
"RESULTS" => $A_results,
|
"RESULTS" => $A_results,
|
||||||
|
@ -33,4 +33,39 @@ final class RecipeModel
|
|||||||
|
|
||||||
return $A_recipe;
|
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();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user