- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
Переиграть и победить: как анализировать конкурентов для продвижения сайта
С помощью Ahrefs
Александр Шестаков
VK приобрела 70% в структуре компании-разработчика red_mad_robot
Которая участвовала в создании RuStore
Оксана Мамчуева
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
Сейчас подсчет осуществляется по следующего алгоритму:
while($result = $db->fetch_object($query))
{
$num_last = $db->result("SELECT COUNT(*) FROM ".DB_PREFIX."_catalog WHERE regid='".$result->regid."'");//скок всего позиций
$db->query("UPDATE ".DB_PREFIX."_region SET counter='".$num_last[0]."' WHERE regid='".$result->regid."' ");
}
<<< ".DB_PREFIX."_catalog
5000 фирм
каждая фирма имеет свой город
Каким еще способом можно посчитать количество фирм находящихся в конкретном городе?
Ну примерно как то так (полей всех не знаю, посему поля наугад)
SELECT
r.regid, COUNT(c.cataid) AS countregion
FROM
".DB_PREFIX."_region AS r LEFT JOIN
".DB_PREFIX."_catalog AS c ON (c.regid = r.regid)
GROUP BY r.regid");
while($result = $db->fetch_object($query))
{
$db->query("UPDATE ".DB_PREFIX."_region SET counter='".$result->countregion."' WHERE regid='".$result->regid."' ");
}
/////////////////////////////////подсчет городов////////////////////////
$query = $db->query("
SELECT
r.regid, COUNT(c.cataid) AS countregion
FROM
".DB_PREFIX."_region AS r LEFT JOIN
".DB_PREFIX."_catalog AS c ON (c.cityid = r.regid)
GROUP BY r.regid");
while($result = $db->fetch_object($query))
{
$db->query("UPDATE ".DB_PREFIX."_region SET counter='".$result->countregion."' WHERE regid='".$result->regid."' ");
}
У нас идет подсчет сначало по полю регионов (т.е. областей), затем по полю города.
К примеру поле regid у таблицы catalog - заполнено всегда, а поле cityid в таблице catalog иногда бывает ноль.
Каким образом можно объеденить это в единый запрос, чтоб одновременно шел подсчет и по областям и по городам.
А нельзя как-то оптимизировать UPDATE?
Вы бы стразу задачу ставили правильно :)
Писал на коленке, нада проверить
ПС не ленитесь использовать ` и AS - очень полезно, поверите :)
А в вашем 2-м варианте - нужно использовать LIMIT 1 для ускорения.
Забыл спросить - индексы выставлены?
bay_ebook, Спасибо Вам огромное, все работает, очень помогли!!!
---------- Добавлено 18.07.2013 в 16:11 ----------
а можно как-то вот это объединить в один запрос?? Чтоб сразу шел подсчет и по полю regid и по полю cityid.В качестве помощи есть следующая закономерность. Длина всех regid=2 (например 11 или 12), а длина всех cityid=4 (например 1110 или 1210)
а можно как-то вот это объединить в один запрос?? Чтоб сразу шел подсчет и по полю regid и по полю cityid.В качестве помощи есть следующая закономерность. Длина всех regid=2 (например 11 или 12), а длина всех cityid=4 (например 1110 или 1210)
Я думал, это уже будет очевидно :)
$db->query("
UPDATE
`".DB_PREFIX."_region` AS `r`
SET
`counter` = ((SELECT COUNT(*) FROM `".DB_PREFIX."_catalog` AS `c` WHERE `c`.`regid` = `r`.`regid`) + (SELECT COUNT(*) FROM `".DB_PREFIX."_catalog` AS `c2` WHERE `c2`.`cityid` = `r`.`regid`))
");
bay_ebook, Спасибо))