Как связать таблицу с этим кодом SQL? - PullRequest
0 голосов
/ 23 марта 2011

Я использую этот удивительный код из @ Richard aka cyberkiwi для запуска запроса (он возвращает сумму value за каждый месяц, для каждого завода):

имя таблицы: данные

record_id   id_fk    plant_id_fk    date         value   category_1
1           1          1            2011-03-01   10      A
2           1          1            2011-03-02   10      A
3           1          1            2011-04-10   5       B
4           1          2            2011-04-15   5       C

код SQL

    select up.id_fk, up.plant_id_fk, ym2, ifnull(sum(data.value_1),0) totalvalue_1
    from (select distinct date_format(date, '%Y-%m') ym, date_format(date, '%M %Y') ym2 from data) dates
    cross join (select distinct data.id_fk, data.plant_id_fk from data) up
    left join data on date_format(data.date, '%Y-%m') = dates.ym
        and up.id_fk=data.id_fk
        and up.plant_id_fk=data.plant_id_fk
        and category_1='A'
    group by up.id_fk, up.plant_id_fk, ym2, ym
    order by up.id_fk, up.plant_id_fk, date(concat(ym,'-1'))

Теперь мне нужно объединить это со следующей таблицейчтобы запустить цикл PHP, который будет извлекать plant_name вместо plant_id.

имя таблицы: заводы

id_fk    plant_id      plant_name
1        1             oak tree
1        2             cherry tree

Кто-нибудь знает, гдевставить предложение, которое создаст это объединение?

Спасибо!

Ответы [ 3 ]

3 голосов
/ 23 марта 2011

Изменено, как показано ниже

выберите
up.id_fk,
p.plant_name,
ym2,
ifnull (сумма (data.value_1), 0) totalvalue_1
из (
выберите отдельный date_format (дата, «% Y-% m») ym, date_format (дата, «% M% Y») ym2
из данных) даты
перекрестное объединение (
выбор различных data.id_fk, data.plant_id_fk
из данных) up
внутренние соединения p на p.plant_id = up.plant_id_fk
данные левого соединения
в формате date_date (data.date, '% Y-% m') = date.ym
и up.id_fk = data.id_fk
и up.plant_id_fk = data.plant_id_fk
и category_1 = 'A'
сгруппировать по up.id_fk, up.plant_id_fk, ym2, ym, p.plant_name
упорядочить по up.id_fk, up.plant_id_fk,дата (конкат (гм, '- 1'))

1 голос
/ 23 марта 2011

Hm. Я не думаю, что набор записей и запрос совпадают; Я не вижу поле record_id из набора полей. Я исправлю запрос, который вы указали.

select up.id_fk, up.plant_id_fk, pn.plant_name, ym2, ifnull(sum(data.value_1),0) totalvalue_1
    from (select distinct date_format(date, '%Y-%m') ym, date_format(date, '%M %Y') ym2 from data) dates
    cross join (select distinct data.id_fk, data.plant_id_fk from data) up
    left join data on date_format(data.date, '%Y-%m') = dates.ym
        and up.id_fk=data.id_fk
        and up.plant_id_fk=data.plant_id_fk
        and category_1='A'
    INNER JOIN plants pn ON up.plant_id_fk = pn.plant_id
    group by up.id_fk, up.plant_id_fk, ym2, ym
    order by up.id_fk, up.plant_id_fk, date(concat(ym,'-1'))

Это должно работать. Я добавил pn.plant_name в область SELECT и использовал INNER JOIN, чтобы присоединить таблицу заводов к верхнему выбору для поля plant_id_fk.

Кроме того, намного проще читать, если элементы SQL пишутся с большой буквы (SELECT, JOIN, GROUP и т. Д.), А также определения таблиц (UP, YM2, YM, DATES и т. Д. И т. Д.). Это всего лишь мое личное предпочтение.

Нишан Карасик www.medfocusrcm.com

0 голосов
/ 23 марта 2011

Прямо перед группой

left join plants on data.id_fk=plants.id_fk and data.plant_id_fk=plants.plant_id

и затем замените в группе на и выберите {up.id_fk, up.plant_id_fk} по plant.plant_name

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...