创建多值搜索,与SQL斗争

时间:2014-11-30 18:00:48

标签: php mysql sql laravel intersect

基于用户输入,可以是单个或多个值,并使用下表

+------+--------+
| seed |  item  |
+------+--------+
|    1 | apple  |
|    1 | grapes |
|    2 | apple  |
|    3 | grapes |
|    3 | banana |
+------+--------+

我想返回

  • 1当用户输入(苹果,葡萄)时,
  • [1,2]代表(苹果)和
  • (苹果,香蕉)没什么。

我当前的PHP代码

$keyword = Input::get('keyword');
        $searchTerms = explode(",", $keyword);
        $query = DB::table('items');
        foreach($searchTerms as $term)
        {   
            $query->where('item', 'LIKE', '%'.$term.'%');
        }
        $results  = $query->distinct()->get(array('seed'));

适用于单个值。在循环中迭代,我只是在当前的$查询中添加更多搜索词。最后,我需要找到所有查询的交集。这是我目前的主要关注点。

1 个答案:

答案 0 :(得分:0)

输入可用尝试

SELECT seed
FROM Items
WHERE item IN ('apple', 'grapes')
GROUP BY seed
HAVING COUNT(item) >= 2
;

SELECT seed
FROM Items
WHERE item IN ('apple')
GROUP BY seed
HAVING COUNT(item) >= 1
;

SELECT seed
FROM Items
WHERE item IN ('apple', 'banana')
GROUP BY seed
HAVING COUNT(item) >= 2
;

HAVING子句中要比较的总数是项目数,您要检查相应的批次。

SQL Fiddle

如果需要进一步的细节或调整,请发表评论。