0

私はmysqlで失敗し、実際にいくつかの助けを借りて行うことができます。それが何と呼ばれるかわかりません。DISTINCTとGROUPBYを組み合わせて使用​​しようとしても、うまくいきません。

これらの列を持つサーバー監視データのテーブルがあります。

nStatusNumber
Bandwidth
Load 
Users
ServerNumber 
DiskFree 
MemFree
TimeStamp

**nStatusNumber** - A unique number increasing for each entry

**ServerNumber** - A unique number for each server

このためのダッシュボードの上部には、一意のサーバーごとに最新のレポートを表示する必要があります。

//監視しているサーバーの数は?

$nNumServers = mysql_numrows(mysql_query("SELECT DISTINCT(ServerNumber) FROM server_status;"));

//サーバーのリストを取得します

$strQuery = "SELECT * FROM server_status ORDER BY nStatusNumber DESC limit ".$nNumServers.";";

次に、$nNumServersに到達するまで結果をループします。これは、サーバーがダウン/アップし始め、レポートの順序が乱雑になるまで、最初は機能していました。20台のサーバーがあるとすると、最新の20件の結果は必ずしも各サーバーから1つであるとは限りません。

私は急いでこれを理解しようとしていますが、失敗しています。私はこれまで、DISTINCTとGROUP BYのさまざまな組み合わせを試しましたが、運が悪かったので、答えがわからない、おそらく恥ずかしいほど簡単な問題についてのガイダンスをいただければ幸いです。

ありがとう!

PS-これは私が試しているクエリの例で、私が抱えている問題を示しています。「nStatusNumber」フィールドを確認してください。これらは各サーバーの最新の結果のみを表示しているはずです-http://pastebin.com/raw.php?i= ngXLRhd6

PPS-max(nStatusNumber)を設定しても、正確な結果は得られません。平均/合計/中央値は必要ありません。各サーバーから報告された最新の実際の数値が必要です。クエリの結果の例は次のとおりです:http://pastebin.com/raw.php?i = eyuPD7vj

4

2 に答える 2

0

nServerNumber目的のために、aと。に固有の行を見つける必要がありますTimeStampMAX(TimeStamp)これは、それに対応する行を見つける必要があると言うほど単純ではありません。

私はSQLの専門家ではありませんが、これを試して、機能するかどうかを確認できます。

SELECT A.nServerNumber, A.nStatusNumber, A.nVNStatsBandwidth, A.fLoad, A.nUsers,
    A.nUsersPaid, A.nServerNumber, A.nFreeDisk, A.nTotalDisk, A.nFreeMemory,
    A.nTotalMemory, A.TimeStamp
FROM server_status A
INNER JOIN
(
    SELECT nServerNumber, MAX(TimeStamp) as `TimeStamp`
    FROM server_status
    GROUP BY nServerNumber
) B
ON A.nServerNumber = B.nServerNumber
AND A.TimeStamp = B.TimeStamp
ORDER BY A.nServerNumber ASC;

このクエリは、すべてのサーバーに最新の情報を提供します。したがって、サーバーの総数が必要な場合はmysql_numrows(...)、この結果に対して関数を実行し、データが必要な場合は、同じ結果を反復処理するだけです(2つの別々のSQLクエリを実行する必要はありません)。

于 2012-12-06T08:53:10.683 に答える
0

これを試して ::

Select 
Select MAX(nStatusNumber) from table,
Bandwidth,
Load,
Users,
ServerNumber,
DiskFree,
MemFree,
MAX(`TimeStamp`)

from your table 
group by ServerNumber
于 2012-12-06T06:54:18.207 に答える