通过OCI8的PHP SQL查询只有在有更多时才获取1行

时间:2014-08-19 21:05:19

标签: php sql oci

我正在运行一个非常简单的查询,当我在SQL开发人员中运行它时,我返回了3行,但是当我采用相同的查询并尝试通过OCI_FETCH检索结果时,只返回1行。

以下是在SQL开发人员中运行时返回3个不同行的原始查询:

select a.cache_nm, b.nm_tx,
CASE
WHEN CAST(max(a.creation_tmstmp) as DATE) - CAST(max(a.request_from_tmstmp) as DATE) < 1/96
THEN 'Current'
ELSE 'BEHIND'
END as Site_Status
from perf_stats a inner join site b on (a.site_seq_id = b.site_seq_id) 
group by a.cache_nm, b.nm_tx

这是PHP实现:

// Prepare the statement
$stid = oci_parse($conn, 'select a.cache_nm, b.nm_tx, 
CASE
    WHEN CAST(max(a.creation_tmstmp) as DATE) - CAST(max(a.request_from_tmstmp) as DATE) < 1/96
    THEN \'Current\'
    ELSE \'BEHIND\'
    END as Site_Status
    from perf_stats a inner join site b on (a.site_seq_id = b.site_seq_id) 
    group by a.cache_nm, b.nm_tx');


    if (!$stid) {
        $e = oci_error($conn);
        trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR);
    }

    // Perform the logic of the query
    $r = oci_execute($stid);
    if (!$r) {
        $e = oci_error($stid);
        trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR);
    }

    // Fetch the results of the query       
    $nrows = oci_fetch_all($stid, $res);

    echo "$nrows rows fetched<br>\n";
    var_dump($res);

结果页面显示:

1 rows fetched

array(3) {
    ["CACHE_NM"] => array(1) {
        [0]=> string(13) "SITE-01"
    }
    ["NM_TX"] => array(1) {
        [0]=> string(14) "SITE GAT"
    }
    ["SITE_STATUS"] => array(1) {
        [0] => string(6) "BEHIND"
    }
}

我做了很多测试,分解了这个查询,并且在没有使用group by语句的情况下返回了多行。我也尝试了所有不同的OCI_FETCH函数。

我的问题是,我是否需要特别使用OCI8函数执行任何操作才能在SQL语句中使用group by。这简直令人沮丧,因为字面上我在SQL中唯一改变的是单引号的转义子句,以及它是INDEED工作的事实,只有1行...

0 个答案:

没有答案