2015-06-08 85 views
6

創建表我該如何取得排名中的「排名最後的ID」?

CREATE TABLE goal_implement(id INT, percent INT); 
INSERT INTO goal_implement VALUES 
    (1,10), 
    (2,15), 
    (3,20), 
    (4,40), 
    (5,50), 
    (6,20); 

查詢

SELECT id, percent, FIND_IN_SET(percent, (
SELECT GROUP_CONCAT(percent 
ORDER BY percent DESC) 
FROM goal_implement) 
) AS rank 
FROM goal_implement 
ORDER BY id DESC 

結果

id percent rank 
6 20  3 
5 50  1 
4 40  2 
3 20  3 
2 15  5 
1 10  6 

我不知道如何來獲取row(rank)是在最後下一例如:ID爲 :last id的等級是3!

要導致

id percent rank 
4 40  2 
+0

查詢? Mysqli還是PDO? – Falt4rm

+0

#Falt4rm 47 - mysql sir – Bee

+0

如果我理解正確,你想從(last_id)的等級中選擇下一個等級 - 我是否正確? (因爲你的解釋有點混亂) - 意思Last_id = 6 - 檢查排名= 3所以搜索排名4 - > id = 4 – Falt4rm

回答

1

要解決你的問題,我們有語言的2種選擇:

  • 的PHP很容易 - >不好玩。

  • MYSQL - >您已經用Mysql完成了一部分工作,所以我以這種方式完成了它。

SQLFIDDLE:Demo

步驟:

  • 獲取最後一個ID的等級+獲得所有百分比

    SELECT FIND_IN_SET(percent, (SELECT GROUP_CONCAT(percent ORDER BY percent DESC) 
             FROM goal_implement)) - 1 into @next_rank 
    FROM goal_implement 
    ORDER BY id DESC 
    LIMIT 1; 
    
    SELECT GROUP_CONCAT(percent ORDER BY percent DESC) 
    FROM goal_implement into @str_rank; 
    
的字符串

此代碼將讓你這樣的:

@next_rank  @str_rank 
    2   50,40,20,20,15,10 

讓我們的樂趣開始(PBM出發 - 卡帕):沒有在任何MYSQL爆炸()函數。

  • 相關@next_rank@str_rank

獲取最佳比例,我們可以使用本機的功能做的是:

  • SELECT SUBSTRING_INDEX(@str_rank, ',', @next_rank);

  • 結果:50,40

但我們只'40'

- >讓我們找到/創建一個函數之間+1和-1位置提取的字符串(大到阿爾曼P.​​)

CREATE FUNCTION SPLIT_STRING(str VARCHAR(255), delim VARCHAR(12), pos INT) 
RETURNS VARCHAR(255) 
RETURN REPLACE(SUBSTRING(SUBSTRING_INDEX(str, delim, pos), 
    LENGTH(SUBSTRING_INDEX(str, delim, pos-1)) + 1), 
    delim, ''); 

SELECT SPLIT_STRING(@str_rank, ',', @next_rank) into @next_percentage;

這將存儲在'40'@next_percentage

結果:(終於)

SELECT *, @next_rank as rank 
FROM goal_implement 
WHERE percent = @next_percentage; 

OUTPUT:

id percent  rank 
4  40   2 

PHP版本:

$Array_test應該是您的查詢返回的數組

<?php 

$array_test = array(array(6,20,3), array(5,50,1), array(4,40,2), 
       array(3,20,3), array(2,15,5), array(1,10,6)); 


$next_rank = $array_test[0][2] - 1; 

foreach($array_test as $row) 
    if($row[2] == $next_rank) 
    { 
     print "<pre>"; 
     print_r($row); 
     print "</pre>"; 
    } 
?> 

輸出:

Array 
(
[0] => 4 
[1] => 40 
[2] => 2 
) 

來源:功能你用什麼做 Stackoverflow : Equivalent of explode

+0

*** @ Falt4rm - 我如何實現從你的PHP代碼到我的下面..... *** '<?php $ result2 = mysql_query($ query2,$ connection); 而($行= mysql_fetch_array($ RESULT2)) { 回聲「 \t ​​{$行[ 'ID']} ​​{$行[ '百分比']}% \t \t​​{$行['rank']} \t \t \t \t \ n「;; } ?>' – Bee

+0

$ result2 = mysql_fetch_array($ result2);通過使用打印「

"; print_r($array_test); print"
」打印我的array_test&你的數組查詢結果來驗證;然後將我的array_test換成你的array_query – Falt4rm

+0

如果你還有問題 - 告訴我。 – Falt4rm

1

第一,獲得最後排名的其他ID ...然後加一個吧。下面的例子。

SELECT id FROM YOUR_TABLE WHERE rank = $last_rank AND id != $last_id ORDER BY id DESC; 

SELECT * FROM YOUR_TABLE WHERE id = $row['id'] + 1; 
1

試試這個:

select * from goal_implement where rank=(select (rank-1) 
from goal_implement where id=(select max(id) from goal_implement)); 

Ø希望您所需的輸出。