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)
|
||||
{
|
||||
$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,
|
||||
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user