Php 如何计算mysql中来自同一行的值之间的差异
我试图计算来自数据库的值列表的差异。 我想用php或mysql实现它,但我不知道如何继续。 我有一张名为player_scores的表。其中一行包含得分 前 我想重复一下在不同日期的比赛中进球的不同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 我怎样才能得到想要的结果 您可以使用
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'];