2017-01-09 99 views
3

我們已經做了一個搜索字段,您可以搜索多種成分,並找到食譜。高級訂單時搜索

我們希望根據食譜中的大部分成分從搜索框中對食譜進行分類。

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

不幸的是,搜索只需要第一個字進去,例如: 「鹽,意大利麪」,它顯示每個含有菜譜的鹽。但包含這兩種成分的配方不是排序最高的配方。

我錯過了什麼?

+0

請提供你的表結構,樣本數據和期望的輸出更清晰的解釋對於觀衆 – Beginner

+1

您搜索的內容是「相關性」,您可以通過最匹配的條款進行訂購。類似於http://stackoverflow.com/questions/18725941/mysql-order-by-best-match –

+0

@Beginner這裏是表:) :) – Jacob

回答

0

雅各!

我認爲這個查詢可以解決你的問題。 請嘗試一下。

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 
+0

不幸的是,它只顯示一個配方,當按計數排序:( – Jacob

1

下面我只是錯過了一個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; 
答案

JS Fiddle Here

+0

@Raymond我嘗試過實施你的解決方案,看看上面:) – Jacob