대신 지속적으로 여러 쿼리로 데이터베이스를 치는이
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;
처럼 한 번에 그것을 할 생각 : (미리 감사) : 아래
코드입니다
여기에 SQLFiddle 데모
가 또는 여기
UPDATE
SET @rnum = 0;
UPDATE bank
SET bankaccountranking = (@rnum := @rnum + 1)
WHERE id = 1
ORDER BY bankbalance DESC;
두 개의 문, 활용하여 사용자 변수 및 ORDER BY
와 SQLFiddle 데모
이제 PHP 코드는 다음과
$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();
,691,363처럼 보일 수있다
(210)
UPDATE : 당신이 여기
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;
이 SQLFiddle 데모
또는 사용자와
(세션) 변수
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;
이다 할 수있는 하위 쿼리와 DENSE_RANK()
분석 기능의 상당을 구현하는 여기에 SQLFiddle 데모
여기서'$ id' ->'$ updateinfo-> bindParam (': id', $ id, PDO :: PARAM_INT); 그것은'$ sessionid'일까요? – Sean
예, $ sessionid가되어야합니다. 오타였습니다. 잡아 주셔서 감사합니다. – user3063143