簡體   English   中英

如何從PHP中的SQL表獲取行位置

[英]How to get row position from sql table in Php

我需要使用PHP腳本從SQL表中獲取“位置(行)”。 我測試了我的SQL語句,它運行良好。 輸出正確。

我的SQL語句:

SET @rownum = 0; 
SELECT position, name,cash FROM (SELECT name, cash, @rownum := @rownum + 1 AS position FROM 'my_DB'.'Cash' ORDER BY cash DESC ) AS t WHERE name = 'user44';

輸出:

"position":44,"name":"user44","cash":"5600"

但是,如果我把它放在PHP中:

$query="SET @rownum = 0; SELECT position, name,cash FROM (SELECT name, cash, @rownum := @rownum + 1 AS position FROM 'my_DB'.'Cash' ORDER BY cash DESC ) AS t WHERE name = 'user44';";

它向我顯示了一個errant query

我也嘗試過這樣的事情:

$query="SELECT position, name,cash FROM (SELECT name, cash, @rownum := @rownum + 1 AS position FROM 'my_DB'.'Cash' ORDER BY cash DESC ) AS t WHERE name = 'user44';";

輸出:

"position":null,"name":"user44","cash":"5600"

感謝VolkerK,我用以下方法解決了該問題:

$query = "SET @rownum =0;"; $result = mysql_query($query,$link) or die('Errant query: '.$query); $query="SELECT position, name,cash FROM (SELECT name, cash, @rownum := @rownum + 1 AS position FROM 'my_DB'.'HSCash' ORDER BY cash DESC ) AS t WHERE name = 'user44'"; $result = mysql_query($query,$link) or die('Errant query: '.$query);

我現在更好了。

訣竅不是獲得位置,而是獲得比用戶得分更高的人數。

SQL:

// Get how much cash the user make
SELECT cash
FROM mydb.cash
WHERE name = :name;

// Get how many people did better + 1
SELECT COUNT(*)+1
FROM mydb.cash
WHERE cash > :cash

受污染的查詢更加復雜,但是不需要對整個表進行排序,看起來像

SELECT position, name, cash
FROM mydb.cash
JOIN (
    SELECT COUNT(*)+1 AS position
    FROM mydb.cash
    WHERE cash > (
        SELECT cash
        FROM mydb.cash
        WHERE name = :name
    )
)
WHERE name = :name

或者,通過在加入之前進行過濾來限制加入,例如:

SELECT position, name, cash
FROM (
    SELECT name, cash
    FROM mydb.cash
    WHERE name = :name
)
JOIN (
    SELECT COUNT(*)+1 AS position
    FROM mydb.cash
    WHERE cash > (
        SELECT cash
        FROM mydb.cash
        WHERE name = :name
    )
)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM