如何根据表列中的最高值从Mysql返回行?

时间:2012-12-20 12:38:28

标签: php mysql arrays highest

我有一个应该在数据库中搜索最高'得分'的函数。 Db的结构如下:

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

我可以正确获得最高分,但我不知道如何根据最高分返回完整对象。 我不愿意遍历整个表并测试'得分'的值以查看哪个是最高的(尽管我输入的是我怀疑我还在做什么),因为db可能有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; 
}

3 个答案:

答案 0 :(得分:2)

SELECT fieldlist
FROM `tableName`
WHERE `score` = (SELECT MAX(`score`) FROM `tableName`)

答案 1 :(得分:-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;
       );

答案 2 :(得分:-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首先获取得分最高的行。