我們已經做了一個搜索字段,您可以搜索多種成分,並找到食譜。高級訂單時搜索
我們希望根據食譜中的大部分成分從搜索框中對食譜進行分類。
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