Как получать часть группы данных, что повторяется единственный раз, и что оставшаяся часть повторилась в MySQL?

Обладай ими следующий подмостки:

inspection -----------------------------------
Columna Tipo            Nulo    Predeterminado  
id_inspection           int(9)  No           
machines_numbers        int(1)  No           
shift_shifts_id         int(9)  No           
group_groups_id         int(1)  No           
sample_samples_id       int(1)  No           
line_lines_id           int(1)  No           
elaborated_employer_id  int(6)  No           
auditored_employer_id   int(6)  Sí  NULL         
approved_employer_id    int(6)  Sí  NULL 
--------------------------------------------

inspections_shapes_registers------------
Columna Tipo              Nulo          
id_isr  int(9)            No             
creation_date_f           varchar(255)               
creation_date_nf          varchar(255)               
inspection_inspections_id int(9)                     
sr_shapes_registers_id    int(9)         
---------------------------------------

shapes_registers----------------------
Columna Tipo            Nulo    
id_shape_register       int(9)                   
data                    varchar(1000)    
machine_machines_id     varchar(1)       
st_shapes_templates_id  int(9)
--------------------------------------

Чтобы показывать данные основываясь в дате и линия использовала следующий query:

SELECT i.id_inspection, 
                       i.machines_numbers, 
                       sr.data,
                       isr.id_isr, isr.creation_date_f, isr.creation_date_nf,
                       s.description as shift_description,
                       g.description as group_description,
                       sa.description as sample_description,
                       l.description as line_description,
                       st.name as shape_description,
                       e.id_card
            FROM       inspections_shapes_registers AS isr 
            INNER JOIN inspections                  AS i 
            ON         isr.inspection_inspections_id = i.id_inspection 
            INNER JOIN shapes_registers AS sr 
            ON         isr.sr_shapes_registers_id = sr.id_shape_register
            INNER JOIN shifts as s
            ON         i.shift_shifts_id = s.id_shift       
            INNER JOIN groups as g
            ON         i.group_groups_id = g.id_group
            INNER JOIN samples as sa
            ON         i.sample_samples_id = sa.id_sample
            INNER JOIN lines_ as l
            ON         i.line_lines_id = l.id_line  
            INNER JOIN shapes_templates AS st 
            ON         st.id_shape_template = sr.st_shapes_templates_id
            INNER JOIN employees AS e 
            ON         i.elaborated_employer_id = e.id_card
            WHERE 
                isr.creation_date_nf = :inspectionDataDate
                AND i.line_lines_id = :inspectionDataLine
                AND i.shift_shifts_id = :inspectionDataShift

То, что я получаю:

1
5
{"inspection1111"}
1
2018-02-22 10:01 AM
2018-02-22
1er
A
Primera Muestra
A1
qq-1244
1233

1
5
{"inspection2222"}
2
2018-02-22 10:01 AM
2018-02-22
1er
A
Primera Muestra
A1
qq-1244
1233

1
5
{"inspection3333"}
3
2018-02-22 10:01 AM
2018-02-22
1er
A
Primera Muestra
A1
qq-1244
1233

1
5
{"inspection4444"}
4
2018-02-22 10:01 AM
2018-02-22
1er
A
Primera Muestra
A1
qq-1244
1233

1
5
{"inspection5555"}
5
2018-02-22 10:01 AM
2018-02-22
1er
A
Primera Muestra
A1
qq-1244
1233

То, что он хотел получить, так как только различная в ней стоимость sr.data ({"inspection1111"}) и id.isr стоимость, продолженная в ({inspection}), но второй не имеет значение много, а получать данные, которых повторяют единственный раз, а именно все sr.data ({inspection}):

Результат:

1
5
{"inspection1111"}
{"inspection2222"}
{"inspection3333"}
{"inspection4444"}
1
2018-02-22 10:01 AM
2018-02-22
1er
A
Primera Muestra
A1
qq-1244
1233

Связи

Каждый реестр INSPECTIONS присоединяет его к нему многообразные SHAPES_REGISTER проверяя, у которого была Ваша идентификация. каждый {"inspection"} его один DATA что соответствует ему SHAPES_REGISTER

Обновление 3:37pm

Заметь: Стоимость для sr.data может преодолевать 1000 символов, будучи приложен вместе. У меня оказывается неполным результат

Результат ответа @Marcos

1
5
{"inspection1111"}
{"inspection2222"}
{"inspection3333"}
{"inspection4444"}
{
1
2018-02-22 10:01 AM
2018-02-22
1er
A
Primera Muestra
A1
qq-1244
1233
1
задан 22.02.2018, 21:41
2 ответа

На основании этот комментарий , чтобы группировать реестры, ты можешь использовать GROUP_CONCAT combinÃ: ndolo с GROUP BY

, поскольку возможно видеть, ты нуждаешься в том, чтобы группировать все их те, у которых есть тот же самый i.id_inspection. А ты показываешь, как нужно группировать их, podr¦, - чтобы не быть ожидаемым.

Asà - например:

SELECT i.id_inspection, 
         i.machines_numbers, 
         # Agrupamos todos los `sr.data` en la columna `data`
         GROUP_CONCAT(sr.data SEPARATOR ',') AS data,
         isr.id_isr, isr.creation_date_f, isr.creation_date_nf,
         s.description as shift_description,
         g.description as group_description,
         sa.description as sample_description,
         l.description as line_description,
         st.name as shape_description,
         e.id_card
    FROM       inspections_shapes_registers AS isr 
    INNER JOIN inspections                  AS i 
    ON         isr.inspection_inspections_id = i.id_inspection 
    INNER JOIN shapes_registers AS sr 
    ON         isr.sr_shapes_registers_id = sr.id_shape_register
    INNER JOIN shifts as s
    ON         i.shift_shifts_id = s.id_shift       
    INNER JOIN groups as g
    ON         i.group_groups_id = g.id_group
    INNER JOIN samples as sa
    ON         i.sample_samples_id = sa.id_sample
    INNER JOIN lines_ as l
    ON         i.line_lines_id = l.id_line  
    INNER JOIN shapes_templates AS st 
    ON         st.id_shape_template = sr.st_shapes_templates_id
    INNER JOIN employees AS e 
    ON         i.elaborated_employer_id = e.id_card
    WHERE 
        isr.creation_date_nf = :inspectionDataDate
        AND i.line_lines_id = :inspectionDataLine
        AND i.shift_shifts_id = :inspectionDataShift
    # Indicamos que queremos agrupar los registro que tengan el mismo `i.id_inspection`
    GROUP BY i.id_inspection

Результат deber¦, - чтобы быть следующим:

1
5
{"inspection1111"},{"inspection2222"},{"inspection3333"},{"inspection4444"}
1
2018-02-22 10:01 AM
2018-02-22
1er
A
Primera Muestra
A1
qq-1244
1233
2
ответ дан 24.11.2019, 01:45
  • 1
    id.shape_register, если он меняется, так как для каждого sr.data существует линия с одним id.shape_register отлично, если я удаляю эту часть в конце group by, функционируй гениально. Если я она оставляю реестры, они повторяются как дела сначала, несмотря на то, что имеют GROUP_CONCAT –  Victor Alvarado 22.02.2018, 17:51
  • 2
    Уже разместите group by, я не вижу изменения, но справедливое то, в чем он нуждался. ¿ ты мог бы объяснять, что он отличается, было бы, если я не размещаю group by? –  Victor Alvarado 22.02.2018, 17:58
  • 3
    @vaavDev, я обновил мой ответ –  Marcos 22.02.2018, 18:03
  • 4
    Превосходный и удовлетворенный:) –  Victor Alvarado 22.02.2018, 18:05
  • 5
    @vaavDev, действительно назначенный по умолчанию предел - 1024 символов. Если ты читаешь documentació n ( видеть ссылку в ответе ) говорит, что, чтобы увеличивать предел, нужно менять стоимость переменной group_concat_max_len. Например SET SESSION group_concat_max_len = 10000; –  Marcos 22.02.2018, 22:10

Чтобы заканчивать завершать ответ, в моем случае string inspection могли прибывать в 2000 приложенных символов.

это Использовал:

$setting = "SET SESSION group_concat_max_len = 1000000";

, Чтобы конфигурировать tamaño длины GROUP_CONCAT

0
ответ дан 24.11.2019, 01:45