2013-04-21 101 views
1

我有这个疑问:PHP MYSQL SET给出错误while循环

$result2 = mysql_query("SET @total=0; 
SELECT *, 
@total:= @total+ `companyearned` AS `total` 
FROM `recordedhours` WHERE `group` = '$uid' 
ORDER BY `unixdate` DESC, `idnum` DESC 
LIMIT $from, $max_results"); 

while ($rowb = mysql_fetch_array($result2)) { 
//DO STUFF 
} 

但SET @总= 0;使得while行给我一个错误: 警告:mysql_fetch_array():提供的参数不是有效的MySQL结果资源 查询在phpmyadmin中正常工作,并且在没有SET @ total = 0的情况下工作正常;

+2

您不能在调用'mysql_query()'时给出多个查询。 – Barmar 2013-04-21 06:10:05

+0

Look @ http://stackoverflow.com/q/12274964/1288198 – 2013-04-21 06:12:28

回答

0

由于您不能在mysql_query()中使用多个查询,但是您可以将您的查询合并到一个查询中。

尝试此查询..

SELECT *, 
@total:= @total+ `companyearned` AS `total` 
FROM `recordedhours`, (SELECT @total:=0) r WHERE `group` = '$uid' 
ORDER BY `unixdate` DESC, `idnum` DESC 
LIMIT $from, $max_results 
+0

感谢您为此问题提供帮助,但列出时未提供正确的结果。我想列出两个数字。该公司已经完成了,而且总的来说。它应该在底部有最古老的结果。这对于公司来说工作得很好,但总的顺序是相反的。这就是我所得到的:'-23.22美元-23.22美元; \t $ -20.22 \t $ -43.44; $ 300.00 \t $ 256.56; \t $ -6.00 \t $ 250.56;'这就是我想要的:'$ -23.22 \t $ 181.20; \t $ -20.22 \t 204.42美元; $ 300.00 \t $ 224.64; $ -6.00 -75.36; (从所有页面总共引入了直到这一点)' – topedge 2013-04-22 15:15:31

+0

任何想法我可以做些什么来改变这一点? – topedge 2013-04-22 22:29:51

+0

我决定,因为这是除了我正在做它需要它自己的问题:http://stackoverflow.com/questions/16173444/php-mysql-sum-total-but-show-rows – topedge 2013-04-23 15:33:30

0

使用两次调用mysql_query()

mysql_query("SET @total=0"); 

$result2 = mysql_query("SELECT *, 
@total:= @total+ `companyearned` AS `total` 
FROM `recordedhours` WHERE `group` = '$uid' 
ORDER BY `unixdate` DESC, `idnum` DESC 
LIMIT $from, $max_results"); 

我觉得变量应该坚持,因为它是相同的数据库连接。

+0

它应该是'mysql_query (“SET GLOBAL @ total = 0”);' – Amir 2013-04-21 06:20:05

+0

@Amir这只是一个会话变量。只有拥有SUPER权限的用户才能设置全局变量。 – Barmar 2013-04-21 06:22:54