Обычно при загрузке картинок на сервер если нужно параллельно создают превьюшку и ее выводят там где нужно при нажатии на которую показывают оригинальное изображение. В Вашем случае можно пройтись скриптом, создать превью параллельно записывая в путь к превью и путь к оригиналу. Создать какой то хэш от пути оригинала что бы быстрее искать.
Еще вариант ничего не менять особо, а сделать ленивую загрузку, когда сервер отдает все картинки как 1 пиксель а на JS заменяем путь из data-src в src, т.е.
По сути, сущности пользователь чужды группы новостей, это не его параметр, грубо говоря, тогда выносим их в отдельную таблицу, например user_vs_gnews, с колонками id,user_id,group_id. Теперь, что бы понять, какие группы выводить, нужно сделать один запрос.
Далее в запросе подставите:
И в 1 и 2 случае он не нужен, если у Вас возвращается по одной строке в результате. Пдо используете крайне неверно, посмотрите документацию. Наименование переменных с большой буквы не приветствуется.