我有一个查询,该查询从数据库中提取以下信息:
现在,您可以看到我已经向查询添加了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
和&SubmissionId
中Status1
相等的portofloading
。
问题是有时您可以拥有`Status1` = 'Pending'
; `Status2` = 'Pending'
; `Status3` = 'Pending'
;全部都相同SubmissionId
。
直到Status%
的所有Status5
字段都“链接”到portofloading1
。因此,这意味着如果Status1 - Status3
都为SubmissionId
的“待定”;查询应该单独列出每一行,即使所有三个字段都具有相同的portofloading1
,相同的SubmissionValueId
和相同的SubmissionId
; 如果您使用上述查询来检索数据并在SubmissionId
上使用INNER JOIN函数。
老实说,我不知道如何更好地表达我的要求。我希望这是有道理的。
我试图更彻底地解释问题,并提供运行此查询的数据库快照,以期使其更加清晰。
答案 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