这有效,但是有没有更短(更有效)的方法呢? 代码比较2个数字。一个来自最近的记录,另一个来自7个记录。
$sql5="SELECT market_cap_rank FROM intelligence WHERE id='$thiscoin' order by day desc limit 0,1";
$row5 = mysqli_fetch_row(mysqli_query($conn, $sql5));
$newest = $row5[0];
$sql6="SELECT market_cap_rank FROM intelligence WHERE id='$thiscoin' order by day desc limit 6,1";
$row6 = mysqli_fetch_row(mysqli_query($conn, $sql6));
$oldest = $row6[0];
$rankdiff=$oldest-$newest;
答案 0 :(得分:2)
您可以将两个查询合并为一个查询,以避免往返数据库服务器。
在SQL变量的帮助下,Assign在订购后对7行中的每一行进行排名。现在,通过过滤排名为sum()
或1
的行,7
的所有值。
如果为rank = 1
,则添加它的否定状态。
请注意,如果$thiscoin
来自用户,则可以更好地进行参数化查询,以避免使用PDO
进行SQL注入攻击。
查询:
select sum(if(rank = 1,-mcr,mcr)) as diff_mcr
from (
SELECT @rank := @rank + 1 as rank,market_cap_rank as mcr
FROM intelligence,(select @rank := 0) r
WHERE id = '$thiscoin'
order by day desc limit 0,7
) derived
where rank = 1 or rank = 7
代码:
这简直是
$rankdiff = mysqli_fetch_row(mysqli_query($conn, $sql))[0];