Сравните значение с запятыми в строке SQL

Я использую двухуровневые блоки выбора на моей веб-странице для фильтрации данных... У меня проблема с моим запросом для вторых значений выбора...

Таблица:

id     name      cat                        loc

1      ABC       resort                     mall road
2      BCD       banquet hall               mall road
3      CDE       farm house, banquet hall   pakhowal road
4      DEF       hotel                      ferozpur road
5      FEZ       hotel                      fountain chowk
6      ZEX       resort                     mall road

У меня есть два поля выбора, в которых первый предназначен для значений DISTINCT cat..., который отлично работает для меня...

Я использую запрос:

select distinct cat from 
(select  trim(substring_index(substring_index (concat(cat,',,'),',',n),',',-1)) 
as cat from table t 
cross join (select 1 as n union all select 2 union all select 3) r) t 
where  cat <> '' ORDER BY cat ASC

Выход:

cat

banquet hall
farm house
hotel
resort

Теперь я хочу сделать запрос, который выбирает все те области, которые имеют одинаковое значение кошки, которое мы выбираем в первом поле, например, если я выбрал "resort" из первого выбора, он выбрал "mall road" для второго поля... и в случае, если я выбрал " Банкетный зал ", тогда следует выбрать" Молл роуд "и" Паховал роуд "и так далее.

Я также использовал запрос для этого, но он не работает должным образом для меня...

Второй запрос окна выбора:

SELECT DISTINCT loc 
from table 
WHERE cat = '$_POST[cat]' AND loc IS NOT NULL

Он дает правильный вывод только для "курортных" и "гостиничных" кошек.... если я выбрал "фермерский дом" или "банкетный зал", он не выдает "паховальскую дорогу"...

Как я могу изменить свой запрос для достижения этого...?

1 ответ

Решение

Попробуй это:

SELECT DISTINCT loc
FROM [YourTable]
WHERE INSTR(CONCAT(', ',cat,' ,'),CONCAT(', ','$_POST[cat]',' ,'))>0 AND loc IS NOT NULL 
Другие вопросы по тегам