在各个行上列出重复的结果?

时间:2018-11-26 09:39:51

标签: sql joomla phpmyadmin

我有一个查询,该查询从数据库中提取以下信息:

Database table image

现在,您可以看到我已经向查询添加了GROUP_CONCAT,并且在 SubmissionId 455 的GROUP_CONCAT列中,有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和&SubmissionIdStatus1相等的portofloading

问题是有时您可以拥有`Status1` = 'Pending'`Status2` = 'Pending'; `Status3` = 'Pending';全部都相同SubmissionId

直到Status%的所有Status5字段都“链接”到portofloading1。因此,这意味着如果Status1 - Status3都为SubmissionId的“待定”;查询应该单独列出每一行,即使所有三个字段都具有相同的portofloading1,相同的SubmissionValueId和相同的SubmissionId 如果您使用上述查询来检索数据并在SubmissionId上使用INNER JOIN函数。

老实说,我不知道如何更好地表达我的要求。我希望这是有道理的。

我试图更彻底地解释问题,并提供运行此查询的数据库快照,以期使其更加清晰。

1 个答案:

答案 0 :(得分:1)

您可以在下面尝试-删除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