Выборка в цикле 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