1

dbで最高の「スコア」を検索することになっている関数があります。Dbは次のように構成されています。

----------------------------------------
|  id  |  UrlId  |  Article  |  Score  |
----------------------------------------

最高のスコアを正しく取得できますが、最高のスコアに基づいてオブジェクト全体を返す方法がわかりません。dbには潜在的に10000のレコードがあるため、テーブル全体をループして'score'の値をテストし、どれが最も高いかを確認するのは気が進まない(とにかくそうしていると思うが、入力している)。これは非常に単純なことだと確信していますが、私には「今日は馬鹿げていて頭がおかしい」というものがあります。もっとエレガントな解決策を知っている人はいますか?

私の最終結果は次のようになる必要があります。同じトップスコアを持つ4つのUrlIdがある場合、ユーザーは次を確認する必要があります。

UrlId example1 20(スコア)

UrlId example2 20(スコア)

UrlId example3 20(スコア)

UrlId example4 20(スコア)

他のすべての結果は表示されません。

function gethappiestBlog() {
  $happiestBlogs = /* This is the data that I loop through, this is correct */
  $happinessArray = array();
  foreach($happiestBlogs as $happiestBlog) {
    $happinessArray[]= $happiestBlog->Score;
  }
  $maxHappy = max($happinessArray);
  echo $maxHappy; 
}
4

3 に答える 3

2
SELECT fieldlist
FROM `tableName`
WHERE `score` = (SELECT MAX(`score`) FROM `tableName`)
于 2012-12-20T12:48:15.363 に答える
-1

これを試して。

$dbh=new PDO(DSN,USERNAME,PASSWORD);
$stmt=$dbh->prepare("SELECT * FROM TABLE_NAME ORDER BY Score DESC");
$stmt->execute();
while($happiestBlog=$stmt->fetch(PDO::FETCH_OBJ)):

    echo $happiestBlog->Score;

endwhile;

ここでORDER BY Score DESCは、スコアが最も高い行を最初にフェッチします。

于 2012-12-20T12:48:03.963 に答える
-1

クエリを使用できませんでしたか?

SELECT * 
  FROM table_name 
 ORDER BY score 
  DESC LIMIT 1;

複数のスコアが必要な場合は、サブクエリを使用できます。

SELECT * 
  FROM table_name 
 WHERE score = 
       (SELECT score
          FROM table_name 
         ORDER BY score 
          DESC LIMIT 1;
       );
于 2012-12-20T12:46:34.347 に答える