我们已经做了一个搜索字段,您可以搜索多种成分,并找到食谱。高级订单时搜索
我们希望根据食谱中的大部分成分从搜索框中对食谱进行分类。
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 | |
+---------+----------+-------------+------------+------------+--+
UPDATE
我试图实现从初级/雷蒙德的解决方案:
"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
不幸的是,搜索只需要第一个字进去,例如: “盐,意大利面”,它显示每个含有菜谱的盐。但包含这两种成分的配方不是排序最高的配方。
我错过了什么?
请提供你的表结构,样本数据和期望的输出更清晰的解释对于观众 – Beginner
您搜索的内容是“相关性”,您可以通过最匹配的条款进行订购。类似于http://stackoverflow.com/questions/18725941/mysql-order-by-best-match –
@Beginner这里是表:) :) – Jacob