- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу

Переиграть и победить: как анализировать конкурентов для продвижения сайта
С помощью Ahrefs
Александр Шестаков
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
Всем ку.
Я обычно работал с достаточно простыми sql-запросами в своих проектах, а тут попался орешек покрупнее - решил попросить помощи у вас :)
Итак,
имеется 3 таблицы - с партнерами, кликами и серчами
у кликов и серчей есть ид партнера pid
Надо выбрать 10 партнеров, по каждому количество его кликов, количество его серчей и отсортировать по кол-ву кликов (начиная с наибольшего). Одним запросом хочется :)
Если без серчей, то такая конструкция работает:
С серчами я пробую такое, но что-то не так (возможно, что я просто косякнул с синтаксисом, а может, уже запутался серьезнее):
--
Параллельно еще мини-вопрос терзает, имеет ли смысл тут использовать DISTINCT, ведь id в ud_feed_clicks и ud_feed_searches и так уникальный параметр и, может, правильнее и дешевле использовать COUNT(ud_feed_clicks.*)?
--
Я просто первый раз использую конструкцию LEFT JOIN .. ON и чувствую что уже немного подзапутался.
А Все, все! Я был невнимателен, сравнение с параметром третьей таблицы идет в еще одном LEFT JOIN, вот как правильно:
Насчет DISTINCT по-прежнему не откажусь от совета.
Если есть возможность, DISTINCT надо убрать.
Это очень "тяжелая" штука.
Параллельно еще мини-вопрос терзает, имеет ли смысл тут использовать DISTINCT, ведь id в ud_feed_clicks и ud_feed_searches и так уникальный параметр и, может, правильнее и дешевле использовать COUNT(ud_feed_clicks.*)?
А что общего между Distinct и Count? Первое убирает повторяющиеся поля, второе их считает.
Вообще если я вас правильно понял то вам нужно такое
ЗЫ. Научитесь нормально оформлять код запросов, я не могу прочитать когда все это слеплено в одну строку да еще и с такими именами полей
Непонятно какой смысл вы здесь вкладываете в distinct ?
вряд ли ud_feed_clicks.id и ud_feed_searches.id содержат неуникальные значения и, я думаю, mysql сам догадается не тупить, но все равно лучше disctinct убрать.
Да вот дело в том, что пример с distinct выдает правильные результаты (допустим, есть 1 партнер, 2 клика и 5 серчей) :
1 партнер / 2 клика / 5 серчей
а без дистинкта (вариант, предложенный neolord) выдает неверные результаты:
1 партнер / 10 кликов / 10 серчей
вряд ли ud_feed_clicks.id и ud_feed_searches.id содержат неуникальные значения
а без дистинкта (вариант, предложенный neolord) выдает неверные результаты:
1 партнер / 10 кликов / 10 серчей
Видимо содержат. Тогда конечно вы от дистинкта никуда не уйдете. Но на самом деле не такое уж это тяжкое бремя, особенно по числовому индексу
id во всех этих таблицах - PRIMARY KEY (т.е. уникален).
А насчет нагрузки - пробовал сейчас (плюс еще временные рамки только за сегодня) с таблицами по 10k записей - тормозит мощно (только что замерял - 13 секунд). Конечно этот расчет будет кешироваться раз в час, но и таблицы будут по миллиону.
киньте побаловатся тестовые таблицы по 10к на мыльце? ya@phpdude.ru
banshee(oleg), без disctinct, похоже, никак. Но, так как ваши две группировки не связаны, и сортируете вы только по одной, вы можете завернуть сортировку внутрь подзапроса и выбрать данные второй группировки уже по индексу. при большом объеме данных должно получиться быстрее, так как вы пропускаете полную сортировку всех получившихся в объединении строк .
netwind добавил 24.02.2009 в 19:04
Как-то так. таблицы я приблизительно воссоздал.
у меня тут query_cost вышел вообще 0 против 7.92 :) надо данных закидать генератором и проверить.
от полного сканирования clicks это не избавляет. нужны или дополнительные таблички для агрегированных данных или ограничивать под дате.
Да, я сейчас ехал домой и все думал об этом.. :) Пришел к примерно такой логике, что надо сделать выборку со всеми условиями из кликов, сгруппировав по pid, а потом уже из оставшихся двух таблиц брать данные для полученных всего-то десяти индексов. Это, я так понимаю, как раз то, что Вы (netwind) написали.. обязательно попробую сегодня. И замеряю производительность в паре вариантов.
bearman, к сожалению, эти таблицы на "live test" сервере содержат слишком приватное инфо, ;) Чтоб побаловаться можно и сгенерировать :)
banshee(oleg), если приватно, то разбирайте сами. генерить чтобы помочь ВАМ, я не собираюсь :) есть другие дела.