我有一个名为“参与者”的表,有3个字段:
prt_id
prt_event_id
prt_participant_id
我所拥有的是在event_id上具有where条件的select查询。查询返回让我们说20行(20个不同的参与者)。我想做的是能够找出给定参与者的行号(prt_id)。
SELECT *
FROM participants
WHERE prt_id = someinteger
答案 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++;
}
?>