SELECT * FROM wp_gmw_locations WHERE region_code='$state'
если вам нужны только идентификаторы, почему вы выбираете все?(не говоря уже о том, что простая интерпретация $ state делает вас склонными к атакам с использованием SQL-инъекций, прочитайте подготовленные операторы.)
Ваше первое улучшение - это только выбор идентификатора:
SELECT object_id FROM wp_gmw_locations WHERE region_code='$state'
следующая вещь: вы используете идентификаторы только для дальнейших запросов, иначе вы не используете их в своем коде, верно?
тогда почему бы не позволить базе данных выполнять тяжелую работу, это намного лучше:
SELECT * FROM wp_bp_groups_members WHERE group_id IN
(SELECT object_id FROM wp_gmw_locations WHERE region_code='$state')
, который не только избавляет от всех этих накладных расходов памяти, но и превращает n+1
запросов к базе данных в один.
снова, вам нужен только идентификатор?далее уточните свой выбор тогда!
SELECT user_id FROM wp_bp_groups_members WHERE group_id IN
(SELECT object_id FROM wp_gmw_locations WHERE region_code='$state')
, который должен значительно сократить объем используемой памяти и время выполнения.Вы должны иметь возможность взять его отсюда и улучшить оставшуюся часть кода.Я рекомендую развернуть SQL-консоль и просто немного поиграть, чтобы вы почувствовали, что база данных может сделать для вас - это довольно много!За последние несколько лет я не сталкивался с какой-либо задачей по поиску данных, которую я не смог бы решить всего лишь с помощью одного запроса.
, кстати: взгляните на foreach -loops, они делают код довольно элегантным по сравнению с for-loop.