• Как провести расчет оптимального маршрута по нескольким точкам?

    @stfed84 Автор вопроса
    Маршрутизатор от яндекса не строит оптимальный маршрут. Он просто прокладывает маршрут по точкам в том порядке что ему задать изначально.
  • Как провести расчет оптимального маршрута по нескольким точкам?

    @stfed84 Автор вопроса
    Видимо информация на том ресурсе устарела.
    Жаль что в яндекс картах нет пока такого функционала.
    Кое-какие функции на картах (геокодер, карта клиентов) уже реализованы с помощью яндекс карт.
    Придется либо полностью переходить на гугл либо придумывать костыли: тут яндекс тут гугл.
  • Как провести расчет оптимального маршрута по нескольким точкам?

    @stfed84 Автор вопроса
    Спасибо, за ответ!
    Вот тут www.integprog.ru/route2 разработчики пишут: "к сожалению, в России картографический сервис не умеет строить маршруты между городами"

    Если оно так, то это не вариант. Надо уметь стоить по России.
  • Какую выбрать схему хранения объектов?

    @stfed84 Автор вопроса
    Спасибо за ответ!

    Концепцию ЕАВ использовал много раз при разработке интернет магазина с возможностью расширения ассортимента - действительно похоже.
    Для этого проекта думаю остановиться на простой большой таблице - всё гораздо проще.
    Необходимости добавления/удаления свойств в интерфейсе администратора нет.
    Мы собрали все возможные (на текущий момент) параметры и типы объектов со всех популярных баз объектов недвижимости, за исключением разве что заграничной. Так что новые свойства, типы если и будут появляться то очень редко и это будет делаться руками программиста.

    Осталось теперь додумать как определить какие поля отображать при выборе определенного типа объекта.
    Можно сделать таблицу
    тип объекта
    название свойства (как поле в таблице объектов)

    Либо не делать таблицу, а зафиксировать эти данные в PHP массиве.
  • Какую выбрать схему хранения объектов?

    @stfed84 Автор вопроса
    Спасибо за совет!
    Таблица свойств типов будет показывать набор свойств соответствующий типу (один тип много свойств)
    Это и есть отдельная связующая таблица между типом и свойством
    Связь везде и только по primary key.

    Создание для каждого свойства своей таблицы - конечно вариант, но как потом работать с 80 таблицами, когда к примеру необходимо будет отредактировать какой-нибудь ENUM
  • Как оптимизировать Медленный запрос в MySQL?

    @stfed84 Автор вопроса
    UNION сольет разные по сути данные в одни столбцы
    или я что-то не понял...
  • Как оптимизировать Медленный запрос в MySQL?

    @stfed84 Автор вопроса
    В общем отдельно два запроса (вычисление количества КП и их сумм, вычисление количества оплаченных счетов и их сумм) работают нормально и вычисляют правильные данные.
    Но если их "скрестить" в один (это нужно для инструмента аналитики фильтры и сортировки) значения в графе billsum возрастают многократно

    SELECT c.id, c.caption,
    COUNT(DISTINCT o.id) ordercount,
    COUNT(DISTINCT of.id) offercount,
    SUM(ofi.price_total) offersum,
    COUNT(DISTINCT b.id) billcount,
    SUM(i.price_total) billsum
    FROM wmail_company c
        JOIN wmail_order o ON (o.company_id = c.id AND o.datetime > '2014-01-01')
    
        LEFT JOIN wmail_comm_bill b ON (b.order_id = o.id AND b.status = '4')
        LEFT JOIN wmail_comm_bill_item i ON (i.comm_bill_id = b.id)
        LEFT JOIN wmail_comm_offer of ON (of.order_id = o.id)
        LEFT JOIN wmail_comm_offer_item ofi ON (ofi.comm_offer_id = of.id)
    
    GROUP BY c.id ORDER BY billsum DESC
  • Как оптимизировать Медленный запрос в MySQL?

    @stfed84 Автор вопроса
    b.status = 4 - статус счета "оплачен"
    надо было записать так b.status = '4' и работает

    вот тут пропустил индекс wmail_comm_offer_item.comm_offer_id
    при попытке его поставить с помощью PhpMyAdmin - 504 Gateway Time-out слишком много записей - как поставить индекс?
  • Как оптимизировать Медленный запрос в MySQL?

    @stfed84 Автор вопроса
    если применить этот код на аналогичной задаче по подсчету коммерческих предложений то запрос уходит в никуда, в таблицах wmail_comm_offer и wmail_comm_offer_item в 5 раз больше строк чем wmail_comm_bill и wmail_comm_bill_item

    SELECT c.id, c.caption, COUNT(DISTINCT o.id) ordercount, COUNT(DISTINCT b.id) billcount, SUM(i.price_total) billsum
    FROM wmail_company c
        JOIN wmail_order o ON o.company_id = c.id
        LEFT JOIN wmail_comm_offer b ON b.order_id = o.id
        LEFT JOIN wmail_comm_offer_item i ON i.comm_offer_id = b.id
    GROUP BY c.id, c.caption ORDER BY billsum DESC LIMIT 50
  • Как оптимизировать Медленный запрос в MySQL?

    @stfed84 Автор вопроса
    если тут сделать так то все работает
    SELECT c.id, c.caption, COUNT(DISTINCT o.id) ordercount, COUNT(DISTINCT b.id) billcount
    FROM wmail_company c
           JOIN wmail_order o ON o.company_id = c.id
           LEFT JOIN wmail_comm_bill b ON (b.order_id = o.id AND b.status = '4')
    GROUP BY c.id, c.caption ORDER BY ordercount DESC LIMIT 50
  • Как оптимизировать Медленный запрос в MySQL?

    @stfed84 Автор вопроса
    сергей спасибо ))) это уже похоже на правду.... осталось разобраться в деталях

    SELECT c.id, c.caption,
    COUNT(DISTINCT o.id) ordercount,
    COUNT(DISTINCT b.id) billcount
    FROM wmail_company c
    JOIN wmail_order o ON o.company_id = c.id
    LEFT JOIN wmail_comm_bill b ON b.order_id = o.id
    GROUP BY c.id, c.caption ORDER BY ordercount DESC LIMIT 50
    все правильно

    но стоит добавить AND b.status = 4 к строке LEFT JOIN wmail_comm_bill b ON b.order_id = o.id - ответ не верный
  • Как оптимизировать Медленный запрос в MySQL?

    @stfed84 Автор вопроса
    если считать только количество заявок
    SELECT c.id, c.caption,
    COUNT(DISTINCT o.id) ordercount
    FROM wmail_company c
    JOIN wmail_order o ON o.company_id = c.id
    GROUP BY c.id ORDER BY ordercount DESC LIMIT 0, 50;

    получаются правильные ответы

    если считаем количество заявок и количество счетов
    SELECT c.id, c.caption,
    COUNT(DISTINCT o.id) ordercount,
    COUNT(DISTINCT b.id) billcount
    FROM wmail_company c
    JOIN wmail_order o ON o.company_id = c.id
    JOIN wmail_comm_bill b ON b.order_id = o.id
    GROUP BY c.id ORDER BY ordercount DESC LIMIT 0, 50;

    получается не то...

    может дело в том что во втором случае условия накладываются?
    т.е. считается только не общее количество заявок а где есть счета? - это не верно.
  • Как оптимизировать Медленный запрос в MySQL?

    @stfed84 Автор вопроса
    нет. работает не так... не могу даже понять что он выдает . какие-то произвольные 12 записей не удовлетворяющих ни одному из условий
  • Как оптимизировать Медленный запрос в MySQL?

    @stfed84 Автор вопроса
    сейчас это печально работает так...

    SELECT wmail_company.id, wmail_company.caption,

    (SELECT COUNT(*) FROM wmail_order WHERE wmail_order.company_id=wmail_company.id) AS ordercount,

    (SELECT COUNT(*) FROM wmail_comm_bill, wmail_order WHERE wmail_comm_bill.order_id = wmail_order.id AND wmail_order.company_id=wmail_company.id AND wmail_comm_bill.status = '4') AS billcount,
    (SELECT SUM(wmail_comm_bill_item.price_total) FROM wmail_comm_bill_item, wmail_comm_bill, wmail_order WHERE wmail_comm_bill_item.comm_bill_id = wmail_comm_bill.id AND wmail_comm_bill.order_id = wmail_order.id AND wmail_order.company_id=wmail_company.id AND wmail_comm_bill.status = '4') AS billsum

    FROM wmail_company

    GROUP BY wmail_company.id

    ORDER BY billsum DESC
  • Как оптимизировать Медленный запрос в MySQL?

    @stfed84 Автор вопроса
    Т.е. в общем логика подсчета такова: общее количество заявок по компаниям, количество выставленных счетов по этим заявкам, суммы по этим счетам
  • Как оптимизировать Медленный запрос в MySQL?

    @stfed84 Автор вопроса
    Тут количество заявок ordercount - это всего заявок или только тех по которым есть счета?
  • Как оптимизировать Медленный запрос в MySQL?

    @stfed84 Автор вопроса
    Сергей, а как тут же подсчитать количество заявок? count(wmail_order.id)
  • Как оптимизировать Медленный запрос в MySQL?

    @stfed84 Автор вопроса
    Коллеги спасибо за советы.
    Тогда добавлю ... есть еще таблица wmail_comm_bill_item
    это товарные позиции счета они связаны с таблицей счетов так wmail_comm_bill_item.com_bill_id = wmail_comm_bill.id
    есть стоимость wmail_comm_bill_item.price_total
    необходимо в том же запросе узнать не только количество счетов но и их суммы SUM(wmail_comm_bill_item.price_total)