Вызов всех гуру mySQL!
Мне нужен сложный запрос для mySQL, но я не могу разобраться с ним. Есть 2 таблицы в вопросе:
Места
(столбцы: location_id, parent, location)
Данные иерархически разбиты на страну, регион, округ и город, таким образом:
1, 0, Англия ( страна )
2, 1, Юго-Запад ( регион )
3, 1, Юго-Восток ( регион )
4, 2, Дорсет ( округ )
5, 4, Борнмут ( город )
6, 4, Пул ( город )
7, 4, Уимборн ( город )
и т.д. до 400+ строк данных о местоположении
профили
(столбцы: profile_id, title, location_id)
Каждая строка имеет один идентификатор местоположения, который ВСЕГДА является городом (т. Е. Последним потомком). Например:
1, 'Этот профиль имеет местоположение, установленное как Борнмут', 5
2, 'Этот профиль имеет местоположение, заданное как Poole', 6
и т.д.
Что мне нужно сделать, так это вернуть все идентификаторы из таблицы Locations, где с ней или ее дочерними элементами связаны записи. Поэтому в приведенном выше примере мне понадобятся следующие идентификаторы местоположения: 1, 2, 4, 5, 6
Причины:
1 - ДА, Англия является родителем юго-запада, Дорсет и Борнмут, который имеет запись
2 - ДА, Юго-Запад является родителем Дорсета и Борнмута, который имеет запись
3 - НЕТ, на Юго-Востоке нет записей или его детей
4 - ДА, Дорсет является родителем Борнмута, у которого есть запись
5 - ДА, в Борнмуте есть запись
6 - ДА, у Пула есть запись
7 - НЕТ, Wimborne не имеет записей
Итак, это действительно возможно? Я пытался сделать это в PHP с вложенными запросами SQL, но время ожидания скрипта истекло, поэтому должен быть способ сделать это только в запросе SQL?
Заранее благодарю! :)
===========
UPDATE
Прочитав и поиграв со всеми этими решениями, я понял, что решаю проблему совершенно неправильно. Вместо того, чтобы проходить через все местоположения и возвращать те, у которых есть записи, это имеет больше смысла и гораздо эффективнее получить все записи и вернуть соответствующие местоположения, а затем пройти вверх по иерархии, чтобы получить каждого родителя местоположения, пока не будет достигнут корень.
Большое спасибо за вашу помощь, по крайней мере, я понял, что то, что я пытался, было ненужным.