我一直在为一个项目学习PHP和MySQL,而我在这部分中苦苦挣扎。为了简单起见,我只列出相关字段(实际上在db中还有更多),假设我有3个表。
Table1
---------------------
Index | Name | email
1 | Rob | [email protected]
2 | Kevin| [email protected]
3 | Amy | [email protected]
Table2
------------------------
id | Info | Submitted
1 | Blah | 0
2 | Yada | 1
Table 3
-------------------------
id | Goal |Submitted
1 | 1 | 1
1 | 2 | 1
1 | 3 | 1
1 | 4 | 0
1 | 5 | 0
3 | 1 | 0
3 | 3 | 1
3 | 4 | 1
因此,表1保留了用户信息,并且是主表
表2用户在字段中输入一些数据,然后在准备好后提交批准。(稍后我将使用Submitted for functions的值)如果用户尚未提交信息,则没有记录。这与Table1是1对1
表3用户输入5个目标的信息。在任何给定时间,可能会为用户输入0到最多5个目标。提交的内容与以后的处理相同。该表与表1是多对一的。目标字段从字面上显示数字1到5,有一个单独的字段保存目标文本,在此示例中不需要。
所需的输出是HTML表
Name | email | info |Goal1|Goal2|Goal3|Goal4|Goal5|
Rob | [email protected] | Blah | 1 | 2 | 3 | 4 | 5 |
Kevin | [email protected] | Yada | | | | | |
Amy | [email protected] | | 1 | | 3 | 4 | |
不知道空白是否被视为NULL或其他原因,因为它们在数据库中不存在。我想在字段中输入*。基本上,Submitted将用于代码以使字段具有超链接,因此它们需要成为查询的一部分,只是不在表显示中,但如果有帮助,则可以显示它。
Name | email | info |Goal1|Goal2|Goal3|Goal4|Goal5|
Rob | [email protected] | Blah | 1 | 2 | 3 | 4 | 5 |
Kevin | [email protected] | Yada | * | * | * | * | * |
Amy | [email protected] | * | 1 | * | 3 | 4 | * |
我正在使用带有左联接和group_concat的查询,但这不适用于不存在的数据,并且我无法弄清楚如何在不进行某些疯狂串联的情况下包括Submitted字段,然后将所有内容分开放入HTML中领域。
我可以包含一些代码,但是由于使用了很多变量,因此可能很难遵循。
我仅使用table1和table3获得的最好成绩:Rob 1,2,3,4,5 Kevin Amy 1,3,4
由于没有考虑尚未输入的记录,因此几乎不可能将数据字符串转换为表。如果我能在每个位置显示一些东西,即使它还不存在,我也知道如何将其显示到html表中。
我希望这是有道理的,有人可以帮助我。
正如您所说的,您最多有5个目标。最好的选择是使用以下查询。
SELECT t1.Name,t1.email
,CASE WHEN t2.Info IS NULL THEN * ELSE t2.Info END as Info
,CASE WHEN g1.Goal IS NULL THEN * ELSE g1.Goal END as Goal1
,CASE WHEN g2.Goal IS NULL THEN * ELSE g2.Goal END as Goal2
,CASE WHEN g3.Goal IS NULL THEN * ELSE g3.Goal END as Goal3
,CASE WHEN g4.Goal IS NULL THEN * ELSE g4.Goal END as Goal4
,CASE WHEN g5.Goal IS NULL THEN * ELSE g5.Goal END as Goal5
FROM Table1 as t1
LEFT JOIN Table2 as t2 ON t2.id = t1.Index
LEFT JOIN Table3 as g1 ON g1.id = t1.Index AND g1.Goal=1
LEFT JOIN Table3 as g2 ON g2.id = t1.Index AND g2.Goal=2
LEFT JOIN Table3 as g3 ON g3.id = t1.Index AND g3.Goal=3
LEFT JOIN Table3 as g4 ON g4.id = t1.Index AND g4.Goal=4
LEFT JOIN Table3 as g5 ON g5.id = t1.Index AND g5.Goal=5
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句