-
Есть база данных с блюдами. На сколько я понимаю код ниже будет выводить записи, в которых есть текст введенный в Edit1. ADOQuery1.Filtered:=false;
ADOQuery1.Filter:='Ингредиенты LIKE ' + #39 + '%' + Edit1.Text + '%' + #39;
ADOQuery1.Filtered:=true; Нужно сделать наоборот: допустим я ввожу в Edit1 "чеснок" и из списка отображения убираются все блюда содержащие "чеснок", остаются те, где нет чеснока. Каким способом это сделать? Есть какой-нибудь запрос или еще что-нибудь?
-
NOT LIKE.
-
-
Чесночный соус останется.
-
full-text search + морфология. Либо нормализовать базу до уровня ингредиентов)
-
> Либо нормализовать базу
Что значит "либо"?!?!? Да с этого начинать надо! Он должен ночью ворочаться и просыпаться от кошмаров, если база минимум до второго уровня не нормализована.
-
>clickmaker © (31.03.14 19:35) [4] Вы серьезно?) full text search для лабораторки?))
-
Fulltext, нормализация, давайте ещё поиздеваемся ))) Вон, [1] - 'Ингредиенты NOT LIKE ' ... и для лабы хватит. Только это, конечно, знак % в начале аргумента лайка не айс, индекс убивает, в продакшен такое низзя :)
-
> full text search для лабораторки?
> для лабы хватит
А где сказано что это лабораторка? Может человек супермегагиперкулинарную базу делает. Только подход крайне неверный. Если вся "база" заключается лишь в одной таблице с единственным полем Recept, то это хрень полная, а не база. Ведь кухарка может в рецепте указать "ни в коем случае не кладите чеснок!" и всё, тупая фильтрация по тексту NOT LIKE %чеснок% выкинет из списка прекрасное бесчесночное блюдо. Надо хотя бы создать отдельную нумерованную таблицу ингредиентов и в таблице с рецептом иметь ссылку на другую таблицу с набором ингредиентов и их количеством, тогда независимо от писанины ты сможешь точно выбрать все блюда, где отсутствует чеснок и даже сможешь выбирать блюда по количеству этого самого чеснока, например всё, где чеснока меньше 20 грамм. А если добавишь таблицу способов обработки, то можно будет выбирать даже блюда, где этот самый чеснок не только меньше 20 грамм, но ещё и давленый, а не резаный.
|