sql - 获取行位置作为结果

时间:2014-05-16 18:43:24

标签: mysql sql

试图找出如何在结果集中包含行位置的返回值。它是一个非常简单的表,由computer_id按WHERE子句排序。我想要的就是每个结果中的(*row position*) as position

我在SO上搜索了一些东西,但没有任何东西可以使用。

$stmt = $db->prepare("
    SELECT *
    FROM computers
    WHERE account_id = :account_id
    ORDER BY computer_id    
");

$stmt->bindValue( ':account_id', $_SESSION['user']['account_id'] );
$stmt->execute();   

$results = $stmt->fetchAll(PDO::FETCH_ASSOC);

echo '<pre>',print_r($results,1),'</pre>';

2 个答案:

答案 0 :(得分:1)

您可以在一个查询中执行您想要的操作(引用的重复问题不会执行此操作):

SELECT (@rn := @rn + 1) as rownumber, c.*
FROM computers c cross join
     (select @rn := 0) var
WHERE account_id = :account_id
ORDER BY computer_id;

要获取所有行的行号,请使用子查询:

SELECT c.*
FROM (SELECT (@rn := @rn + 1) as rownumber, c.*
      FROM computers c cross join
           (select @rn := 0) var
      ORDER BY computer_id
     ) c
WHERE account_id = :account_id;

请注意,这将花费更多时间,因为它必须处理整个表。

答案 1 :(得分:0)

由于这是PHP,你可以创建一个变量,遍历结果并随时增加变量。

还有:ROW_NUMBER() equivalent in MySQL for inserting

可以在MS SQL中获得类似于row_number()的内容。