примерно поиск можно выполнять так
SELECT * FROM company WHERE category_id regexp '[[:<:]](".$cat_id.")[[:>:]]' AND city='Чтото'
где $cat_id строиться переменная со списком категорий 11|12|13|14
т.е. ты находишься в родителе с ИД 10, тебе нужна рекурсивная функция что бы вывести список категорий который относится к этому родителю, который будет записываться в переменную $cat_id
пример
$cat_id = get_sub_cat('10'); // возвращает 11|12|13|14|15 т.е. детёныши родителя с ИД 10