2012-12-20 1 views
1

У меня есть функция, которая должна искать db для самой высокой «оценки». ДБ структурирована следующим образом:Как вы возвращаете строки из Mysql на основе максимального значения в столбце таблицы?

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

я могу получить высокий балл правильно, но я не знаю, как вернуть весь объект, основанный на высокий балл. Я не хочу перебирать всю таблицу и проверять значения «score», чтобы узнать, какой из них является самым высоким (хотя, как я и утверждаю, я все равно делаю это), потому что у db потенциально будет 10000 записей. Я уверен, что это мертво просто, но сегодня у меня «тупой и я не могу мозг». Кто-нибудь знает более элегантное решение?

Мой конечный результат должен быть что-то вроде этого: если есть 4 UrlId; s с тем же наивысший балл, пользователь должен был бы видеть:

UrlId example1 20 (оценка)

UrlId example2 20 (оценка)

UrlId example3 20 (оценка)

UrlId Example4 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, вы можете «заказать по счету desc» и «limit 0,1», чтобы получить одну строку. – NappingRabbit

+0

Почему вы используете 'exit();' in function? –

ответ

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 имеет самый высокий показатель.

Смежные вопросы