如何使用PHP和OracleSQL将多列合并为一列,使其循环但按具有重复ID的行划分?

时间:2018-09-21 07:46:15

标签: php oracle oci

我已经编写了代码,但是我无法按照自己的意愿进行编写,要求是使数据我必须仅通过一列来重复相同id所拥有的数据,尽管它与真实数据库是分开的(不同的列),所以这是我的数据

number  pay_status  card_status
021998877  UNPAID  ACTIVE
021998875  NULL  NOT ACTIVE
021998875  NULL  ACTIVE

我想这样更改它:

number   others 
021998877  ACTIVE 
021998877  UNPAID  
021998876  NOT ACTIVE 
021998875  ACTIVE

现在我可以得到这样的输出了:

021998877  ACTIVE UNPAID

这是我的输出代码

while ($row = oci_fetch_assoc($stid)) {
        printf("<tr><td>%d</td><td>%s</td></tr>\n", $row['no'],
            $row['card_status'],$row['pay_status'] );

我正在使用PHP和OracleSQL作为数据库。请帮助,谢谢

1 个答案:

答案 0 :(得分:0)

所以我想你是说,如果card_status不为NULL,则打印第二行。

在这种情况下,这样做非常简单。

while ($row = oci_fetch_assoc($stid)) {
    printf("<tr><td>%d</td><td>%s</td></tr>\n", 
                $row['no'],
                $row['pay_status'] );
    if ( $row['card_status'] != 'NULL' ) {
        printf("<tr><td>%d</td><td>%s</td></tr>\n", 
                $row['no'],
                $row['card_status'] );
    }
}
  

您可能需要根据结果集上实际的值来修改NULL的测试!

从您的评论中可以看出,该行中的3列比起初提到的要多。

要对结果集中的多列执行此操作,可以循环遍历结果集中的列,并将结果打印在输出中的许多行上,将NULL转换为字符串'NULL'

while ($row = oci_fetch_assoc($stid)) {
    foreach ( $row as $colname => $value) {
        if ( $colname == 'no' ) {
            continue;   // ignore the key field column
        }

        $value = $value == NULL ? 'NULL : $value

        printf("<tr><td>%d</td><td>%s</td></tr>\n", 
                    $row['no'],
                    $value );
        }

    }
}