2012-12-20 96 views
1

我有一个功能,应该搜索数据库的最高'分数'。 数据库的结构是这样的:如何根据表列中的最高值从Mysql返回行?

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

我可以正确地获得最高分,但我不知道如何返回基于分数最高的完整的对象。 我不愿意遍历整个表并测试'score'的值来查看哪个值最高(尽管我输入的数据是我怀疑我正在做它),因为db可能会有10000条记录。 我相信这很简单,但我有“愚蠢的,我今天不能集思广益”有人知道一个更优雅的解决方案吗?

我的最终结果必须是这样的: 如果有4 URLID; S以相同的最高分,用户需要看到:

URLID EXAMPLE1 20(得分)

例2 URLID 20(得分)

URLID示例3 20(得分)

URLID范例4 20(得分)

所有行吟诗人r结果将不会显示。

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; 
} 
+0

道歉我使用的术语“对象”不正确,我仍然是一个新手,希望你会明白我的意思 – user1882752

+1

我不知道你想要做什么。如果从mysql获取数据,您可以按'score desc'和'limit 0,1'命令获取单行。 – NappingRabbit

+0

你为什么在函数中使用'exit();'? –

回答

2
SELECT fieldlist 
FROM `tableName` 
WHERE `score` = (SELECT MAX(`score`) FROM `tableName`) 
+0

这正是我所需要的,它完美地工作。 – user1882752

-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; 
     ); 
+0

按分数排序DESC – Randy

+0

谢谢但“分数”不是唯一的,如果有重复的最高分数,我需要显示所有这些。 – user1882752

+0

@ user1882752请参阅我的答案 - 它也会返回重复项。 – BenM

-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取该行第一EHICH具有最高得分。如果

相关问题