2009-08-28 16 views
0

私は2つのmsyqlテーブル、バッジとイベントを持っています。私はすべてのイベントを見つけて、次のコードを使用して、そのイベントのバッジ情報(タイトル&記述)を返すように結合を使用:mysqlの代わりにphpで最大値を取得

SELECT COUNT(Badges.badge_ID) badge_count、タイトル、Badges.description ASを Badgesからカウントダウンに加えてタイトルASC

BY Events ON Badges.badge_id = Events.badge_id GROUP JOINを、私はほとんどのエントリを持つイベントの価値を知っている必要があります。私はmax()関数を使ってPHPでこれを行うと思っていましたが、正しく動作するようにするのは難しかったです。だから、私は、 "ORDER BY badgecount DESC LIMIT 1"を使って上記のクエリを修正することで同じ結果を得ることができたと判断しました。

この解決策は私にとってはうまくいくが、PHPで作業する代わりに、2つのクエリを使用してサーバーへの呼び出しを2回行う(b/c)私はPHPでそれをやった場合、どのように私は連想配列の特定の項目の最大値を得ることができます(可能な場合、キーと値を返すことができればいいですね)?

EDIT: OK、それは心のために何時間も安心しています。私は今朝自分のコードを開き、簡単にコードを修正してくれました。私は単純にカウント・フィールドに変数を作成し、新しいものが古いものよりも大きかった場合は、新しい値(次のコードでは「IF」文を参照してください)にそれを変更:($場合

c> $ highestCount){ $ highestCount = $ c; }

+0

あなたは(読み)パフォーマンスについて心配している場合は、冗長性を計算し、保存するために考えられてきました新しいエントリーが作られた時の情報? – VolkerK

+0

15分前に尋ねられたこの類似した質問をご覧ください: http://stackoverflow.com/questions/1345307/php-retrieve-minimum-and-maximum-values-in-a-2d-associative-array – Amber

答えて

4

これは再び「宗教的戦争」につながる可能性がありますが、私は2つのクエリバージョンを使用します。私にとっては、できるだけデータベース内でデータを扱うのがよりクリーンです。長期的には、クエリキャッシングなどは、余分なクエリによって引き起こされるオーバーヘッドを排除します。とにかく

、PHPで最大を得るために、あなたは、単にあなたの$ results配列を反復処理する必要があります。

getMax($results) { 
    if (count($results) == 0) { 
    return NULL; 
    } 

    $max = reset($results); 
    for($results as $elem) { 
    if ($max < $elem) { // need to do specific comparison here 
     $max = $elem; 
    } 
    } 
    return $max; 
} 
+0

私2つのクエリ方法に同意します。順序付け(列が索引付けされている限り)で、データベースの呼び出しは非常に高速であり、より効率的なメモリー賢明です。 – ctcherry

+0

私は2つの質問に同意します。索引引数を基にして(データベースエンジンがそれらのすべての値を読み取るためにディスクにヒットしないことを意味する可能性があります)、データベースサーバーが別のマシンにある場合にトラフィックを節約します。 マイクロマニュファグレージングの最適化に気をつけてください:) –

+0

これは私が今朝行ったことに似ています。また、クエリメソッドの意見に感謝します。このフォローアップはおそらく別の質問に属していると思われます(回答されている可能性が高い)が、どの方法がリソースを最も消費しないかをテストする「最良の方法」は何ですか? – staypuffinpc

関連する問題