Могу ли я оптимизировать этот ORDER BY перед GROUP BY, а затем GROUP BY, запросить MySQL? - PullRequest
1 голос
/ 13 января 2012

Мое приложение предназначено для сравнения товаров, продаваемых несколькими продавцами на ежедневной основе. Процесс запускается для загрузки текущих значений данных для каждого хранилища и заносит их в базу данных вместе с любыми предыдущими данными. Позже я планирую создавать графики и прочее из истории данных.

SELECT `a`.`part_number`, GROUP_CONCAT(`a`.`seller_id` ORDER BY `price` ASC), GROUP_CONCAT(`b`.`part_id` ORDER BY `price` ASC), GROUP_CONCAT(`b`.`price` ORDER BY `price` ASC)
FROM `parts`
LEFT JOIN (
           SELECT * 
           FROM (
                 SELECT * 
                 FROM `parts_data` AS `tmp_a`
                 ORDER BY `date_added` DESC
                ) AS `tmp_b`
           GROUP BY `part_id`
          ) AS `b`
ON `a`.`part_id` = `b`.`part_id`
GROUP BY `a`.`part_number`

Чтобы немного объяснить запрос, мне нужно выбрать самую последнюю информацию о цене для нескольких идентификаторов деталей и сгруппировать их вместе с выбранным номером детали для сравнения. Кроме того, при объединении сгруппированные элементы сортируются по цене, чтобы быть самой высокой к самой низкой.

Каждый номер детали также может иметь любое количество идентификаторов элементов, связанных с ним, поэтому нет никакого значения того, сколько компаний отслеживается.

part_number |  column1  |  column2  |  column3
++++++++++++++++++++++++++++++++++++++++++++++++
            | seller:A1 | seller:A3 | seller:A6
  153231    | id:x423   | id:x534   | id:x902
            | cost:23   | cost:34   | cost:57
++++++++++++++++++++++++++++++++++++++++++++++++
            | seller:A3 | seller:A1 | seller:A6
  345123    | id:x313   | id:x631   | id:x652
            | cost:78   | cost:86   | cost:99
++++++++++++++++++++++++++++++++++++++++++++++++
            | seller:A5 | seller:A1 |
  231756    | id:x663   | id:x291   |
            | cost:35   | cost:52   |
...