2013-06-05 18 views
0

我有一个mysqli的问题。当我尝试在php内使用它时,我给了我一个错误,但是当我在某些database application中执行查询时,它完美地工作。这让我对Mysqli排名语法

SET @rank=0; SELECT (@rank := @rank+1) 

错误在那里我可以执行它mysql yog正确。有没有其他的选择,我怎么才能使它工作?

下面的代码:

function get_rank($branch,$cat){ 
    global $connection; 
    $result = array(); 
    $rank = 0; 
    if ($statement = $connection->prepare("SET @rank=0; SELECT (@rank := @rank+1) AS rank, a.branch_code_id, SUM(b.amount), c.category FROM sales_add_h AS a INNER JOIN sales_add_i AS b ON a.id = b.sales_h_id INNER JOIN control_panel_item_create AS c ON b.item_code_id = c.id WHERE a.branch_code_id = ? AND c.category = ? GROUP BY c.category, a.branch_code_id, b.amount ORDER BY SUM(b.amount) DESC")) {   
     $statement->bind_param("is",$branch,$cat); 
     $statement->execute(); 
     $statement->bind_result($a,$b,$c,$d); 
     while ($row = $statement->fetch()) { 
      array_push($result,array($a,$b,$c,$d)); 
     }  
     $statement->close(); 
    } else { 
     printf("Errormessage: %s\n", $connection->error); 
     echo " error in SQL Statement."; 
    } 
    return $result; 
} 
+1

什么错误提示? – Raptor

+0

SQL语句中出现“echo”错误。“;'** – Luv

+0

您在准备使用的字符串中有多个语句。 Mysqli_prepare在单个语句上工作 - “准备SQL查询,并返回一个语句句柄用于语句的进一步操作,查询必须由单个SQL语句组成。” – Kickstart

回答

1

您正在执行2查询您的代码,并且不与PHP函数工作。但是你可以整合你setselect

SELECT (@rank := @rank+1) AS rank, a.branch_code_id, SUM(b.amount), c.category 
FROM sales_add_h AS a, 
    (select @rank := 0) r 
INNER JOIN sales_add_i AS b ON a.id = b.sales_h_id 
INNER JOIN control_panel_item_create AS c ON b.item_code_id = c.id 
WHERE a.branch_code_id = ? 
AND c.category = ? 
GROUP BY c.category, a.branch_code_id, b.amount 
ORDER BY SUM(b.amount) DESC 
+0

+1正在回答相同的逻辑,但你更快。 – Luv

0

而且我的评论,尝试一下本作的SQL

SELECT (@rank := @rank+1) AS rank, a.branch_code_id, SUM(b.amount), c.category 
FROM sales_add_h AS a 
INNER JOIN sales_add_i AS b ON a.id = b.sales_h_id 
INNER JOIN control_panel_item_create AS c ON b.item_code_id = c.id 
CROSS JOIN (SELECT @rank=0) Sub1 
WHERE a.branch_code_id = ? 
AND c.category = ? 
GROUP BY c.category, a.branch_code_id, b.amount 
ORDER BY SUM(b.amount) DESC 
+0

给我一个语法错误。我该如何解决它? – Yassi

+0

对不起,我在那里留下了一个额外的分号。现在删除 – Kickstart