Instead of constantly hitting the database with multiple queries, consider to do it at once like this
UPDATE bank t JOIN
(
SELECT id, bankaccount,
(
SELECT COUNT(*)
FROM bank
WHERE id = b.id
AND bankbalance > b.bankbalance
) + 1 rank
FROM bank b
WHERE id = 1
) s
ON t.id = s.id
AND t.bankaccount = s.bankaccount
SET t.bankaccountranking = rank;
Here is SQLFiddle demo
or with two statements, leveraging user variables and ORDER BY
in UPDATE
SET @rnum = 0;
UPDATE bank
SET bankaccountranking = (@rnum := @rnum + 1)
WHERE id = 1
ORDER BY bankbalance DESC;
Here is SQLFiddle demo
Now php code might look like this
$sessionid = $_SESSION['uid'];
$sql = "UPDATE bank t JOIN
(
SELECT id, bankaccount,
(
SELECT COUNT(*)
FROM bank
WHERE id = b.id
AND bankbalance > b.bankbalance
) + 1 rank
FROM bank b
WHERE id = :id
) s
ON t.id = s.id
AND t.bankaccount = s.bankaccount
SET t.bankaccountranking = rank;";
$stmt = $conn->prepare($sql);
$stmt->bindParam(':id', $sessionid , PDO::PARAM_INT);
$stmt->execute();
UPDATE: to implement equivalent of DENSE_RANK()
analytic function with a subquery you can do
UPDATE bank t JOIN
(
SELECT id, bankaccount,
(
SELECT COUNT(DISTINCT bankbalance)
FROM bank
WHERE id = b.id
AND bankbalance > b.bankbalance
) + 1 rank
FROM bank b
WHERE id = 1
) s
ON t.id = s.id
AND t.bankaccount = s.bankaccount
SET t.bankaccountranking = rank;
Here is SQLFiddle demo
or with user(session) variables
SET @r = 0, @b = NULL;
UPDATE bank b JOIN
(
SELECT id, bankaccount, @r := IF(@b = bankbalance, @r, @r + 1) rank, @b := bankbalance
FROM bank
WHERE id = 1
ORDER BY bankbalance DESC
) s
ON b.id = s.id
AND b.bankaccount = s.bankaccount
SET bankaccountranking = rank;
Here is SQLFiddle demo