我们已经做了一个搜索字段,您可以搜索多个成分,并找到食谱。
我们想要根据食谱分类,从搜索框中的大部分成分。
if (isset($_POST['search'])) {
$searchquery = $_POST['search'];
$vals = "'" . str_replace(",", "','", $searchquery) . "'";
$query = mysql_query("SELECT * FROM opskrifter WHERE id IN
(SELECT opskrifterid FROM ingredienser WHERE ing_name IN ('$vals'))") or die("search failed");
能把它们分类吗?
编辑:菜谱表
+---------+----------+-------------+------------+------------+--+
| id | name | procedure | category | image_url | |
+---------+----------+-------------+------------+------------+--+
| 1 | Sausage | Fry it | Main dish | www....com | |
| 2 | Pizza | Bake it | Main dish | www....com | |
| 3 | Burger | Eat it | Main dish | www....com | |
+---------+----------+-------------+------------+------------+--+
配料表
+---------+----------+-------------+------------+------------+--+
| id | recipeid | ing_num | ing_meas | ing_name | |
+---------+----------+-------------+------------+------------+--+
| 1 | 1 | 1 | stack | sausage | |
| 2 | 2 | 200 | g | wheat | |
| 3 | 2 | 100 | g | beef | |
+---------+----------+-------------+------------+------------+--+
更新
我尝试实现了Beginner/Raymond的解决方案:
"SELECT *, COUNT(*) as `total_ingredients`
FROM opskrifter as k
, ingredienser as i
WHERE k.id = i.opskrifterid
AND i.ing_name IN ($vals)
GROUP BY k.id
ORDER BY COUNT(*) DESC"
$vals = "'" . str_replace(",", "', '", $searchquery) . "'";
和$searchsquery = $_POST['search']; //From the searchfield
不幸的是,搜索只考虑了第一个单词,例如:“盐,意大利面”,它显示了每个含有盐的食谱。但包含这两种成分的配方并不是排序最高的。
我错过了什么?
发布于 2017-01-09 16:08:40
雅各布!
我认为这个查询可以解决您的问题。求你了试试吧。
SELECT k.id
, k.name
, COUNT(*)
FROM opskrifter k
, ingredienser i
WHERE k.id = i.opskrifterid
AND i.ing_name IN ('sausage','beef', 'wheat')
ORDER BY COUNT(*) DESC
https://stackoverflow.com/questions/41551617
复制相似问题