Список повторяющихся результатов в отдельных строках? - PullRequest
0 голосов
/ 26 ноября 2018

У меня есть запрос, который извлекает из базы данных следующую информацию:

Database table image

Теперь, как вы можете видеть, я добавил GROUP_CONCAT кзапрос, а в столбце GROUP_CONCAT с помощью SubmissionId 455 имеется 2 значения.

ПОЛУЧЕННЫЙ РЕЗУЛЬТАТ

ЧтоЯ пытаюсь добиться, чтобы перечислил каждое значение по отдельности, ГДЕ оно имеет ТО ЖЕ SubmissionID или ЖЕ FieldValue или ЖЕ SubmissionValueId

Таблица должна выглядеть следующим образом:

SubmissionValueId --- FieldName ---   FieldValue   ---   SubmissionId --- FormId --- GROUP_CONCAT

52133              portofloading1   King Abdullah Port       399            28     King Abdullah Port
64318              portofloading1   Jeddah Seaport           419            28     Jeddah Seaport
74723              portofloading1   King Abdullah Port       439            28     King Abdullah Port
79269              portofloading1   Jeddah Seaport           444            28     Jeddah Seaport
87144    ***       portofloading1   Jeddah Seaport           455            28     Jeddah Seaport
87144    ***       portofloading1   Jeddah Seaport           455            28     Jeddah Seaport
87663              portofloading1   King Abdullah Port       456            28     King Abdullah Port
105786             portofloading1   King Abdullah Port       501            28     King Abdullah Port
109419             portofloading1   King Abdullah Port       508            28     King Abdullah Port
120521             portofloading1   King Abdullah Port       528            28     King Abdullah Port
129869             portofloading1   Jeddah Seaport           548            28     Jeddah Seaport

В таблице, где я пометил строки с помощью ***, в основном то, что мне нужно сделать.Мне нужно перечислить каждую строку по отдельности, даже если это дубликат (я не знаю, возможно ли это)

Вот код для получения значений (данных изображения):

SELECT a.SubmissionValueId, a.FieldName, a.FieldValue, a.SubmissionId, a.FormId, GROUP_CONCAT(a.FieldValue)
FROM    jos_rsform_submission_values a
        INNER JOIN
        (SELECT SubmissionId, FieldName
         FROM jos_rsform_submission_values b
            WHERE FieldName IN ('Status1', 'Status2', 'Status3', 'Status4', 'Status5')
             AND FieldValue = 'Pending'
              AND FormId = 28
         ) AS test
         ON a.SubmissionId = test.SubmissionId
WHERE  a.FieldName = 'portofloading1' AND a.FormId = 28
GROUP BY SubmissionId

Причина, по которой мне нужно перечислить каждое из них по отдельности, заключается в том, что мне нужно извлечь значение portofloading для каждого поля, где `Status` = 'Pending'.Таким образом, если `Status1` = 'Pending', он перечислит portofloading1, где SubmissionId из Status1 && portofloading равны.

Проблема в том, что иногда вы можете иметь `Status1` = 'Pending';`Status2` = 'Pending';`Status3` = 'Pending';все для ЖЕ SubmissionId.

Все Status% поля до Status5 "связаны" с portofloading1.Таким образом, это означает, что если Status1 - Status3 все 'Ожидание' для SubmissionId;запрос должен перечислять каждую строку по отдельности, , даже если все три поля имеют одинаковые portofloading1, одинаковые SubmissionValueId и одинаковые SubmissionId; ЕСЛИ вы используете вышеуказанный запрос для извлечения данных и используете функцию INNER JOIN для SubmissionId.

Я, честно говоря, не знаю, как лучше выразить словами то, что мне нужно.Я надеюсь, что это имело смысл.

Я пытаюсь более подробно объяснить проблему и предоставил снимок базы данных, выполняющей этот запрос, чтобы, надеюсь, сделать ее более понятной.

1 Ответ

0 голосов
/ 26 ноября 2018

Вы можете попробовать ниже - удалить group_concat() and group by пункт

SELECT a.SubmissionValueId, a.FieldName, a.FieldValue, a.SubmissionId, a.FormId, a.FieldValue
FROM    jos_rsform_submission_values a
        INNER JOIN
        (SELECT SubmissionId, FieldName
         FROM jos_rsform_submission_values b
            WHERE FieldName IN ('Status1', 'Status2', 'Status3', 'Status4', 'Status5')
             AND FieldValue = 'Pending'
              AND FormId = 28
         ) AS test
         ON a.SubmissionId = test.SubmissionId
WHERE  a.FieldName = 'portofloading1' AND a.FormId = 28
...