要选择最后一条记录,我的数据库是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);
}
它不起作用 - 我没有得到最后的记录。
答案 0 :(得分:3)
你还有什么用呢?如果要确定下一个ID,则不要执行此操作,而是使用sequence。如果没有,那么您可以使用select max(id) from testid
来获取列的最大值。
修改强>
首先创建一个序列来存储序号:
create sequence testid_seq;
然后,当您插入记录时,请使用
insert into testid(id, ...) values ("D111-" || testid_seq.nextval, ... );
只需填写要插入信息的点。
答案 1 :(得分:0)
如果您阅读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
的反转。