PHP MySQL - 查找行ID

时间:2012-03-09 13:38:25

标签: php mysql sql

我有一个名为“参与者”的表,有3个字段:
prt_id
prt_event_id
prt_participant_id

我所拥有的是在event_id上具有where条件的select查询。查询返回让我们说20行(20个不同的参与者)。我想做的是能够找出给定参与者的行号(prt_id)。

SELECT * 
FROM participants
WHERE prt_id = someinteger

5 个答案:

答案 0 :(得分:3)

虽然您无法使用MySQL专门找到行ID,但您可以执行以下操作:

$conn = new mysqli(/*dbinfo*/);
$res = $conn->query("SELECT prt_id FROM participants");

$rowids = array(); $currid = 1;
while ($row = $res->fetch_object()) { // this is using the mysqli library
  $rowids[$row->prt_id] = $currid;
  $currid++;
}

这将为您提供与prt_id相关联的一系列ID。

答案 1 :(得分:1)

这应该在MySQL中做你想要的(即按照prt_id的顺序分配rownum),但性能将取决于表中的行数,因此它不是最佳的。

SELECT * FROM (
  SELECT @tmp:=@tmp+1 rownum, p.*
  FROM (SELECT @tmp:=0) z, participants p
  ORDER BY prt_id
) participants
WHERE prt_id = 36;

演示here

编辑:这个“doh level”重写使用一个简单的索引范围而不是表扫描,所以应该更快(假设prt_id是主键)

SELECT *, COUNT(p2.prt_id) ROWNUM
FROM participants p1
JOIN participants p2
  ON p1.prt_id >= p2.prt_id
WHERE p1.prt_id=36;

演示here

答案 2 :(得分:0)

您可以在数据库中添加索引列,将其设置为int,主键和自动增量。然后在检索行时检索索引号。

答案 3 :(得分:0)

RowID是Oracle的一项功能:http://docs.oracle.com/cd/B19306_01/server.102/b14200/pseudocolumns008.htm

MySQL没有类似的东西,你可以基本上通过在检索每一行时为php中的数组赋值来模拟它,但这并不能保证下次检索结果时你得到相同的数字。您可能不得不满足于使用其中一个主要ID

答案 4 :(得分:0)

您可以执行以下操作:

<?php

$counter = 1; // Start at one for first entry

$res = mysql_query("SELECT * FROM participants WHERE prt_id = 12");

while( $array = mysql_fetch_assoc($res) )
{
    // Do something with the counter, store it into array with details
    $counter++;
}
?>