Выборка в цикле foreach

Есть таблица "subscriptions" (подписки), нужно в определенное время делать выборку из таблицы "ads" (объявления) по параметрам подписки и отправлять пользователям. Можно ли все это сделать не в цикле? Или как сделать по уму чтобы не "уложить" БД когда подписок будет > 1000?

$stmt = $dbh->query("SELECT * FROM subscriptions s
JOIN users u ON u.id = s.user_id");
$stmt->execute();
$subscriptions = $stmt->fetchAll();

foreach($subscriptions as $subscription) {
    $stmt = $dbh->query("SELECT ads.ad_headline, ads.ad_price, ads.ad_shirketadi, ads.ad_city, CONCAT('https://site.com/', cat.catid, '/', cat.adid) AS link FROM ads
    JOIN adcat ON adcat.adid = ads.id
    WHERE ads.ad_city = '{$subscription['city']}' AND SUBSTRING_INDEX(SUBSTRING_INDEX(ads.ad_price, ' ', 1), '-', -1) >= {$subscription['salary']} AND adcat.catid = '{$subscription['subcategory_id']}' LIMIT 5");
    $stmt->execute();
    $res = $stmt->fetchAll();
    if(empty($res)) continue;
    $result[$subscription['chat']][] = $res;
}

Ответы (1 шт):

Автор решения: AndreyVitovtov
SELECT 
   u.chat AS chat,
   s.id AS subscription,
   ads.ad_headline AS headline, 
   ads.ad_price AS salary, 
   ads.ad_shirketadi AS shirketadi, 
   ads.ad_city AS city, 
   CONCAT('https://site.com/', cat.catid, '/', cat.adid) AS link  
FROM subscriptions s
JOIN users u on u.id = s.user_id
JOIN ads ON
   ads.ad_city = s.city AND
   SUBSTRING_INDEX(SUBSTRING_INDEX(ads.ad_price, ' ', 1), '-', -1) >= s.salary
JOIN adcat cat ON cat.adid = ads.id AND 
   cat.catid = s.subcategory_id
→ Ссылка