2015-08-18 89 views
0

的列表查詢我有這個表Mysql的選擇(搜索)與項目

recipe_tbl 
id | name | ingredients 
-------------------- 
1 | Banku | corn dough, cassava dough, okra, tomato, onion, pepper, garden eggs 
2 | Jollof | rice, tomato, pepper, onion, spice 
3 | fufui | cassava, okra, plantain 

,我要選擇具有匹配任何通過使用提供的名單的成分配方。

例如,如果用戶搜索「coco,butter,okra」,他們應該得到ID爲1和3的物品,因爲它們都包含「OKRA」,並且如果他們搜索「辣椒,奶油,咖喱」 ID爲1和2,因爲它們包含「PEPPER」。

我將GE高興,如果有人能幫助我,謝謝

+1

因爲表不歸你可能想使用MySQL的函數[FIND_IN_SET](https://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_find-in -set)將每個OR語句的結果一起添加,如果它> 0,則返回它。但不要求它很快..規範化的數據會執行得更快,因爲它可以使用索引。你的另一種選擇是考慮[全文搜索](https://dev.mysql.com/doc/refman/5.0/en/fulltext-search.html#function_match)'匹配' – xQbert

回答

0

以$ userInput =「可可,奶油,秋葵」 使用像setence帶給每個人,每排 就像你想

在這些名稱
SELECT * FROM recipe_tbl 
WHERE ingredients like "%$userInput%" 
+0

感謝那 – AleMelo

+0

這個問題有一個問題方法是,它只會在示例「coco,butter,okra」中查找確切的userInput,因爲結果查詢將是'LIKE「%coco,butter,okra%。另一個想法是將其分解爲一個數組,並將每個數組都包含爲一個或 – aaronott

0

您可以使用like運算符在php中構建select語句。在php中分離每個不同的搜索參數。我假設你正在尋找不同的id而不是重複。

<?php 
$arr = array("coco", "butter", "okra"); 
$length = count($arr) 
$sql = "SELECT DISTINCT id FROM recipe_tbl WHERE ingredients LIKE " 
for ($x = 0; $x < $length; $x++) { 
    if($x == 0) $sql .= "'%$arr[$x]%'"; 
    $sql .= " OR ingredients LIKE '%$arr[$x]%'" 
} 
$conn = new mysqli($servername, $username, $password, $dbname); 
$result = $conn->query($sql); 
?>