2015-08-18 59 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); 
?>