0

我正在使用 codeigniter 并且有工作查询,可以获取用户 3 张图像。我想计数并给每个图像一个数字 1,2,3,4,5,6,7 ...并希望该查询输出

-number (count),
-id,
-image,
-date

我的 sql 查询:

function bar_images_first($user_id)
{   
    $sql = "SELECT id, image, UNIX_TIMESTAMP(date) as date FROM images WHERE user_id = 3 LIMIT 3";
    $query = $this->db->query($sql, $user_id);
    return $query->result_array();
}

是否可以在查询中做计数器?

4

2 回答 2

3

可以通过将 SQL 参数设置为

SET @cnt := 0;
SELECT
    @cnt := @cnt + 1,
    id,
    image,
    UNIX_TIMESTAMP(date) as date 
FROM images WHERE user_id = 3 LIMIT 3";

但是这样的多个语句不能从 PHP 的mysql_query()方法中执行。但是,mysqli 函数mysqli_multi_query()也允许执行多个查询,所以如果可能的话,使用 mysqli 方法而不是 AR 方法。

但是,您可以一个接一个地运行多组查询。

$query = array(
    "SET @cnt := 0;",
    "SELECT
        @cnt := @cnt + 1,
        id,
        image,
        UNIX_TIMESTAMP(date) as date 
    FROM images WHERE user_id = 3 LIMIT 3"
);

foreach($query as $qry) {
     $result= $this->db->query($qry);
     //.........
}
于 2012-05-13T09:42:11.533 回答
2

作为单个查询运行:

SELECT @curRow := @curRow + 1 AS row_number, id, image, UNIX_TIMESTAMP(date) as date
FROM images
JOIN (SELECT @curRow := 0) r
WHERE user_id = 3
LIMIT 3

这是非常特定于 MySQL 的。如果您想要更多可移植代码,我建议您在代码中制作行计数器。

编辑- 忘记给予应有的信用:MySQL - 记录集中的行号?

于 2012-05-13T10:01:45.347 回答