要选择最后一条记录,当我的数据库是 MySQL 时,我正在使用它:
$result = mysql_query("SELECT Id
FROM test
ORDER BY LENGTH(Id), Id ASC");
$count = mysql_numrows($result);
if($count != 0) {
$lastid = mysql_result($result,$count-1,"Id");
}
...它工作正常。
但是现在我的表在 Oracle 数据库中 - 我写道:
$stid = oci_parse($conn, "SELECT Id
FROM test
ORDER BY LENGTH(Id), Id ASC");
oci_execute($stid);
$p = oci_parse($conn, "SELECT COUNT(ID)
FROM test");
oci_execute($p);
$count = oci_fetch_array($p);
if($count[0] != 0) {
$lastid = oci_result($stid, $count[0]-1);
}
它不起作用 - 我没有得到最后的记录。
最佳答案
如果您阅读了 oci_result 的文档,您会发现您错误地使用了第二个参数。
第二个参数是用于检索列的参数 - 它可以是列名或序号值。序数值是一个数字,从一 (1) 开始,基于 SELECT 子句中指定的列。序数不是推荐的做法,因为如果查询发生变化——如果你忘记更新序数引用,你对值的检索就会出错。实际上,随后的 COUNT 查询返回的值高于第一个查询 SELECT 子句中的列数。
$stid = oci_parse($conn, "SELECT Id
FROM test
ORDER BY LENGTH(Id), Id ASC");
oci_execute($stid);
$lastid = oci_result($stid, 1);
oci_result
缺少 mysql_result
的第三个参数提供。要在 Oracle 中工作,请使用:
$stid = oci_parse($conn, "SELECT x.id
FROM (SELECT Id
FROM test
ORDER BY LENGTH(Id) DESC, Id DESC) x
WHERE ROWNUM = 1");
oci_execute($stid);
$lastid = oci_result($stid, 1);
更新的查询将返回一行,最新的基于反转
ORDER BY
你以前用过。
关于php - 从oracle中选择记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5919823/