【问题标题】:Formatting output data into tables based on results根据结果​​将输出数据格式化为表格
【发布时间】:2012-04-06 13:17:08
【问题描述】:

想通了,下面的解决方案!

我有一个 HTML 表,该表由数据库中的数据填充,其中两个表使用以下结构:

Table 1:
------------------------------
|id|data|other_data|more_data|
------------------------------

Table 2:
--------------------------------
|id|entryId|fileType|other_data|
--------------------------------

我以类似方式加入这两个表:

SELECT * FROM table1 LEFT JOIN table2 ON table2.entryId = table1.id

样品返回:

------------------------------------------------------------
|id|data|other_data|more_data|id|entryId|fileType|other_data|
-------------------------------------------------------------
|1 |....|..........|.........|1| 1      |file1   |..........|
|1 |....|..........|.........|2| 1      |file2   |..........|
|2 |....|..........|.........|3| 2      |file1   |..........|
|2 |....|..........|.........|4| 2      |file2   |..........|
|3 |....|..........|.........|5| 3      |file1   |..........|
|4 |....|..........|.........|6| 4      |file2   |..........|

对于每种情况,我预计至少有一个结果,通常是两个我想根据fileType 字段进行排序。 fileType 可以是file1file2

<table>
<tr>
<td>file1 data here</td>
<td>file 2 data here</td>
</tr>
</table>

如果结果中没有文件 1 或文件 2,请插入一个破折号 (-),但始终保持该表的结构以相同的方式和相同的顺序。我怎样才能做到这一点?我尝试了一个简单的 if/else 构造,但我的逻辑是错误的,并且返回了乱序的数据;我很难找到一个可行的解决方案。

while(docs.next) {

if(docs.getString("fileType").equals("file1")) {
        .....<td>file 1 data</td>
    }

else if(docs.getString("fileType").equals("file2")){
        .....<td>file 2 data</td>
    }
}

一如既往,非常感谢您的帮助!

**想通了,谢谢!解决方案:

我将逻辑分解为两个查询,然后使用您的建议: - 第一个查询从 table1 中获取数据,设置 HTML 表 - 设置两个变量(fileData1, fileData2) null - 第二个查询从 table2 中获取数据,遍历结果以查找匹配项,如果结果存在则更改实际值 - 循环后,打印带有结果的表格单元格**

【问题讨论】:

    标签: java mysql if-statement


    【解决方案1】:

    如果我理解正确,无论如何你都需要打印&lt;td&gt;s。您的if 条件限制打印&lt;td&gt; - 只有在满足给定条件时才会打印&lt;td&gt;。所以你需要改变它。相反,您需要这样做 - 通读 docs,获取 fileType。如果是 file1,则将其值分配给一个变量,该变量已初始化为 null。如果是 file2 ,则将其赋值给一个变量,该变量已初始化为 null。然后测试该变量并打印“-”或每个案例的内容。

    假设变量file1Datafile2Data 分别表示在docs 上的每次迭代中来自file1 和file2 的字符串数据,

    while(docs.next) {
       String file1Data = null;
       String file2Data = null;
       if(docs.getString("fileType").equals("file1")) {
       // assign value for fiel1Data here
       } 
       if(docs.getString("fileType").equals("file2")) {
       // assign value for fiel2Data here
       }
       System.out.println("<tr>");
       System.out.println("<td>" + (file1Data == null || file1Data.equals("")?"-" : file1Data) + "</td>");
       System.out.println("<td>" + (file2Data == null || file2Data.equals("")?"-" : file2Data) + "</td>");
       System.out.println("</tr>");
    }
    

    【讨论】:

    • 这让我更接近于解决我的问题,但这不会迫使我返回包含重复数据的两行,除了文件。除了“fileType”字段之外,我当前的查询在两行中返回两行具有相同数据的行。我只想在一个单独的单元格中显示一个包含两个文件的表格行。
    • 我使用您的建议并通过分成两个查询来解决这个问题。我在原始问题中发布了解决方案。非常感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-05
    • 2023-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多