На основе пользовательского ввода, который может быть одним или несколькими значениями, и с использованием следующей таблицы
+------+--------+
| seed | item |
+------+--------+
| 1 | apple |
| 1 | grapes |
| 2 | apple |
| 3 | grapes |
| 3 | banana |
+------+--------+
я хочу вернуться
Мой текущий код 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'));
работает для отдельных значений. Итерируя в цикле, я просто добавляю больше поисковых терминов к текущему запросу $. В конце мне нужно найти пересечение всех запросов. В настоящее время это моя главная проблема.
При наличии входных данных попробуйте
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
пункт — это количество товаров, которое вы проверяете в соответствующей партии.
Пожалуйста, прокомментируйте, если требуется дополнительная детализация или корректировка.
Других решений пока нет …