mysql — сравнивает значение с переполнением стека 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
2

Другие решения

Других решений пока нет …