Борис Сёмов, есть огромная разница в количестве запросов. Например, phpMyAdmin в цикле по всем таблицам считает кол-во записей в них, а это занимает много времени.
Вот и пишите в нем код, который будет выполняться.
Если в любом файле используете какую-либо функцию, классы, константы или переменные - убедитесь, что они предварительно они подключены (явно через include или неявно через autoload) и объявлены.
можно быть криптомиллионером, но не иметь реальных денег, чтобы за хлеб заплатить
Если у вас нет денег на хлеб - не покупайте крипту.
Крипту, лотереи и прочие фантики можно покупать только на лишние деньги, которыми вы готовы рискнуть и иногда потерять.
Сторонний SMTP должен работать даже на локалхосте.
Если ошибка - значит, он использует конфиг с пустыми значениями. Дебажить надо. Проверить, что в конфиге в init(), что в транспорте и т.д.
Алексей Иванов, я пишу "вариант 1 - плохой, потому что поощряет говнокод", а вы мне отвечаете "вариант 2 не подходит".
Ну, не подходит. И что?
Значит, надо найти другие варианты, которые подходят.
Вариант 3: выбирать ID (который в group by), а уже потом по ним остальную информацию.
Вариант 4: для остальных полей использовать аггрегационные функции.
... group by service_id
или при обычной выборке.