Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/246.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何计算mysql中来自同一行的值之间的差异_Php_Mysql - Fatal编程技术网

Php 如何计算mysql中来自同一行的值之间的差异

Php 如何计算mysql中来自同一行的值之间的差异,php,mysql,Php,Mysql,我试图计算来自数据库的值列表的差异。 我想用php或mysql实现它,但我不知道如何继续。 我有一张名为player_scores的表。其中一行包含得分 前 我想重复一下在不同日期的比赛中进球的不同 Ex: pl_date pl_scores diff 03/11/2014 18 +3 02/11/2014 15 +5 01/11/2014 10 no diff 我怎样才能得到想要的结果 您可以使用

我试图计算来自数据库的值列表的差异。 我想用php或mysql实现它,但我不知道如何继续。 我有一张名为player_scores的表。其中一行包含得分

我想重复一下在不同日期的比赛中进球的不同

Ex:
pl_date       pl_scores    diff
03/11/2014     18          +3
02/11/2014     15          +5
01/11/2014     10          no diff

我怎样才能得到想要的结果

您可以使用两个查询,一个用于获取下面示例中比较中使用的值,即分数较小的值,另一个用于获取具有差异的专用列的记录:

select *,
 coalesce(
 (SELECT concat(IF(t1.pl_scores>t2.pl_scores,'+',''),(t1.pl_scores-t2.pl_scores))
     FROM tableX t2 WHERE t2.pl_date<t1.pl_date ORDER BY t2.pl_date DESC LIMIT 1)
 , 'no data' ) as diff
FROM tableX t1
WHERE 1
order by t1.pl_date DESC
SELECT MIN(pl_scores);

SELECT pl_date, pl_scores, (pl_scores - minScore) as diff FROM player_scores;
或者,使用事务查询执行php端:

START TRANSACTION;

SELECT MIN(Importo) FROM Transazione INTO @min;

SELECT Importo, (Importo - @min) as diff FROM Transazione; 

您似乎想将分数与前一行的分数进行比较

可能最简单的方法是使用一个子查询,该子查询获取的最大pl_日期小于当前行的pl_日期,然后将该子查询的结果与player_分数表合并,以获取每个日期的详细信息:-

SELECT ps1.pl_date, ps1.pl_scores, IF(ps2.pl_date IS NULL OR ps1.pl_scores = ps1.pl_scores, 'no diff', ps1.pl_scores - ps1.pl_scores) AS diff
FROM
(
    SELECT ps1.pl_date, MAX(ps2.pl_date) prev_date
    FROM player_scores ps1
    LEFT OUTER JOIN player_scores ps2
    ON ps1.pl_date > ps2.pl_date
    GROUP BY ps1.pl_date
) sub0
INNER JOIN player_scores ps1
ON sub0.pl_date = ps1.pl_date
LEFT OUTER JOIN player_scores ps2
ON sub0.prev_date = ps2.pl_date
可能还有其他方法可以做到这一点,例如,使用变量处理有序子查询的结果,将每一行与存储在变量中的前一行的值进行比较

SELECT score FROM TABLE WHERE DATE = TheDateYouWant 

$score = $data['score']; 

 SELECT score FROM TABLE WHERE date = dateYouWant
 $difference = $score - $data['score'];

像这样的吗?

我想你指的是同一张桌子,不是吗row@AdamHopkinson,+1表示思维正确,但有时在同一个$行中可以有不同的值。如果是这样的话,那么OP,你需要用,或|或{}之类的东西来分隔你的值,然后在你的PHP页面中得到这些值,这样计算差值就容易多了。你能吗?这个问题非常清楚地显示了一个表,每行有一个分数是的,在同一行中可以有多个值。但我理解你所说的,这就是为什么我给你加1@Flosculus,你听说过concat吗?嗨,Gino,你的查询工作正常,但我无法用php提取差异。我使用这个循环来回应差异结果:$sql=mysql\u querySELECT pl\u scored\u goal,pl\u scored\u goal-@min作为hb\u游戏的差异;虽然$row=mysql_fetch_array$sql{echo$row['diff'];}尝试$row->diff来访问差异。Hi Gino,我也尝试使用$row->diff来回显结果,但它不起作用。嗨,我使用print_r打印sql,得到了这样的结果:资源id 9I也使用var_dump打印了diff,我得到了NULL而不是4和-9
SELECT score FROM TABLE WHERE DATE = TheDateYouWant 

$score = $data['score']; 

 SELECT score FROM TABLE WHERE date = dateYouWant
 $difference = $score - $data['score'];