Хорошо, моя дилемма заключается в следующем. У меня есть страница администратора, которую я использую, чтобы получить сводку представленных за день заявок на один из моих сайтов. На этой странице суммирования извлекаются данные из нескольких таблиц, в некоторых из которых хранятся фактические данные мультимедиа, в других - URL-адреса, идентификаторы и владельцы веб-сайта, а в другой таблице хранится ежедневная статистика для расчета коэффициентов ввода / вывода для каждого домена.
Эта страница администратора имеет основной запрос, который извлекает фактические данные мультимедиа, который выглядит следующим образом (упрощенно):
SELECT
content.con_catid,
content.con_posttime,
content.con_url,
content.con_id,
content.con_title,
categories.name,
users.username,
users.user_id,
FROM content
LEFT JOIN categories
ON (content.con_catid = categories.id)
LEFT JOIN users
ON (content.con_poster = users.user_id)
WHERE con_status = 0 ORDER BY con_posttime
Довольно прямо вперед. Затем, это где это становится грязным. Каждый раз, когда он зацикливается на операторе mysql_fetch_array (для вывода каждого элемента содержимого), я также выполняю следующие 2 запроса:
SELECT count(con_id) as pending FROM content WHERE con_poster = '$this_userid' AND con_status = 0
SELECT count(con_id) as approved FROM content WHERE con_poster = '$this_userid' AND con_status = 2
Они получают количество ожидающих и утвержденных элементов для каждого пользователя, которому принадлежит представление (которое указано рядом с каждой отправкой.
И затем есть убийца, который добавляет много времени ко времени выполнения страницы, так как он также должен повторяться для каждой строки исходного запроса.
SELECT website_url,
website_id,
website_shady,
COALESCE(sum(dstats_hits),0)+website_in_ballast as total_in,
COALESCE(sum(dstats_hits_out),0)+website_out_ballast as total_out,
sum(dstats_hits_out_paid) as total_paid,
website_in_ballast,
website_out_ballast
FROM websites
LEFT JOIN domain_stats ON (websites.website_id = domain_stats.dstats_domid)
WHERE website_id IN (SELECT website_id FROM websites WHERE website_userid = $this_userid)
GROUP BY website_url
Есть ли способ объединить последние 3 запроса в первый? Потому что сейчас .... если у меня 100 элементов в очереди, то это 301 запрос (401, если вы включите подзапрос), что занимает некоторое время для генерации страницы.