2012-05-13 53 views
0

我正在使用codeigniter并使用用户3图像进行工作查询。我想打一个算一个让每个图像的号码1,2,3,4,5,6,7 ......,并且想要查询输出在sql查询中制作计数器

-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(); 
} 

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

回答

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); 
    //......... 
} 
+0

你是什么意思两个查询? – Viktors

+0

@ViktorsGolubevs,他的意思是逐个运行每个查询,就像我最后一个例子。 – Starx

+0

'@'是什么? –

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?