我们制作了一个搜索字段,您可以在其中搜索多种成分并查找食谱。
我们想根据搜索框中成分最多的食谱对食谱进行排序。
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'];//来自搜索字段
不幸的是,搜索只考虑了第一个词,例如: “salt, pasta” 它显示了每个包含盐的食谱。但是包含这两种成分的食谱并不是排序最高的。
我错过了什么?
最佳答案
在我之前的下面的答案只是错过了一个 GROUP BY
这就是为什么它只返回一行
SELECT k.id
, k.name
, COUNT(*) as `total_ingredients`
FROM receipts as k
, ingredients as i
WHERE k.id = i.receipt_id
AND i.ing_name IN ('sausage','beef', 'wheat', 'sauce', 'flour', 'wheat', 'beef', 'ketsup', 'onion', 'garlic')
GROUP BY k.id, k.name
ORDER BY COUNT(*) DESC;
关于php - 搜索时高级 ORDER BY,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41551617/