есть ли более эффективный способ сравнения двух переменных, полученных из БД? - PullRequest
1 голос
/ 05 августа 2020

Это работает, но есть ли более короткий (более эффективный) способ сделать это? код сравнивает 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;

1 Ответ

2 голосов
/ 05 августа 2020

Вы можете объединить оба запроса в один, избегая циклических обращений к серверу БД.

Назначьте ранги каждой из 7 строк после упорядочивания с помощью переменной SQL. Теперь sum() все значения путем фильтрации строк, имеющих ранг 1 или 7. Если rank = 1, добавьте его отрицательное состояние.

В качестве примечания, если $thiscoin исходит от пользователя, вы можете лучше делать параметризованные запросы, чтобы избежать атак SQL инъекций, используя PDO .

Запрос:

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];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...