1

我有一个应该在数据库中搜索最高“分数”的功能。Db 的结构如下:

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

我可以正确获得最高分,但我不知道如何根据最高分返回完整对象。我不愿意遍历整个表并测试'score'的值以查看哪个是最高的(尽管在我输入时我怀疑我无论如何都在这样做),因为数据库可能有 10000 条记录。我确信这很简单,但是我有“愚蠢的,我今天不能动脑” 有谁知道更优雅的解决方案?

我的最终结果必须是这样的:如果有 4 个 UrlId;s 具有相同的最高分,用户将需要查看:

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

你不能用查询吗?

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 回答
-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 回答