2012-05-20 79 views
2

我從最近的十個輸入項中進行選擇,但我不確定如何從這十個輸入項中獲得最受歡迎的項目?另外我如何計算最受歡迎的條目&的輸出數量?從最近輸入的十個值中選擇最受歡迎的輸入項

<?php 
    $sql = "SELECT data FROM table_answers ORDER BY id DESC LIMIT 10"; 
    $result = mysql_query ($sql, $db); 
    while ($row = mysql_fetch_array ($result)) 
    { 
     echo "[".$row['data']."]"; 
    } 
?> 

而且我試圖做WHERE值,但它不返回任何結果。

$sql = "SELECT data FROM table_answers WHERE id IN (SELECT id FROM table_answers 
     ORDER BY id DESC LIMIT 10) ORDER BY popularity DESC LIMIT 1"; 
$result = mysql_query ($sql, $db); 
    while ($row = mysql_fetch_array ($result)) 
    { 
     echo " [".$row['data']."] "; 
    } 

任何人都知道我在這裏可能會做錯什麼?請

+1

請不要使用古老的'mysql_ *'函數編寫新代碼。他們不再被維護,社區已經開始[棄用流程](http://goo.gl/KJveJ)。相反,您應該瞭解[準備好的語句](http://goo.gl/vn8zQ)並使用[PDO](http://php.net/pdo)或[MySQLi](http://php.net/ mysqli的)。如果你不能決定,[本文](http://goo.gl/3gqF9)將有助於選擇。如果你關心學習,[這裏是一個很好的PDO相關教程](http://goo.gl/vFWnC)。 – rdlowrey

回答

2

這應該解決的問題 -

SELECT tableorder.* 
FROM (SELECT * 
     FROM table 
     ORDER BY id DESC 
     LIMIT 10) tableorder 
ORDER BY tableorder.popularity DESC 
LIMIT 1 

內查詢將排序ID的基礎上,獲得前10名外將再次普及的基礎上,10行進行排序並返回最受歡迎的行。

+0

tableorder只是內部SELECT的別名,因爲它表現爲外部SELECT的表。 對於百分比試試這個 - SELECT dataandcount.data, \t dataandcount.count * 10 FROM(SELECT tableorder.data, COUNT(*)作爲計數 \t FROM (SELECT * FROM 表 ORDER BY ID DESC LIMIT 10)tableorder GROUP BY tableorder.data)dataandcount ORDER BY dataandcount.popularity DESC LIMIT 1; dataandcount在這裏再次被賦予表的別名。我不確定這個查詢的性能,但我認爲這將解決您的目的。 – JHS

+0

更正了上述查詢。 SELECT dataandcount.data,dataandcount.count * 10 FROM(SELECT tableorder.data,COUNT(*)AS count FROM(SELECT * FROM table ORDER BY id DESC LIMIT 10)tableorder GROUP BY tableorder.data)dataandcount ORDER BY dataandcount.count DESC限制1; – JHS

+1

如果你在其上添加另一個SELECT並將計數乘以10,它將給出百分比(count * 100/10 = count * 10)。在這樣做的時候,你應該按次數來獲得最高的百分比。 – JHS

2
SELECT data 
FROM (
    SELECT data 
    FROM table_answers 
    ORDER BY id DESC 
    LIMIT 10 
) t 
ORDER BY popularity 
+0

感謝您的回覆,但它仍然不適合我。 '$ SQL = 「SELECT數據 FROM(SELECT 數據 FROM table_answers ORDER BY ID DESC LIMIT 10 )噸 ORDER BY普及」; $ result = mysql_query($ sql,$ db); ($ row = mysql_fetch_array($ result)) echo「[」。$ row ['data']。「]」; }' – lana