在sql查询中创建计数器

时间:2012-05-13 09:33:09

标签: php mysql sql codeigniter

我正在使用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();
}

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

2 个答案:

答案 0 :(得分: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_multi_query()这样的mysqli函数也允许执行多个查询,所以如果可能的话,使用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);
     //.........
}

答案 1 :(得分: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 - row number in recordset?