Как я могу выбрать запись в базе данных с наибольшим количеством points_points и убедиться, что она отображается первой?PHP / Kohana 3 - PullRequest
0 голосов
/ 16 августа 2010

Привет всем и, как обычно, спасибо всем, кто нашел время, чтобы прочитать это.

Я пытаюсь отобразить все ответы, относящиеся к заданному вопросу. Я использую Kohana 3.

На данный момент я могу определить, какая запись имеет наибольшее количество очков голосов через:

$best_id = DB::query(Database::SELECT, 'SELECT id FROM answers WHERE vote_points=(SELECT MAX(vote_points) FROM answers) AND question_id ='.$question->id)->execute();

И я собираю все свои ответы и отображаю их, помещая набор результатов в цикл foreach:

<?php foreach($question->answers->where('moderated', '=', 0)->where('deleted', '=', 0)->order_by('created_at', 'ASC')->find_all() as $answer): ?> 
A bunch of display answer functions and divs~~~

Мне нужно найти способ обеспечить, чтобы запись с $ best_id отображалась первой и только один раз, в то время как остальные ответы отображаются и упорядочиваются с помощью create_at asc.

Спасибо всем!

Ответы [ 2 ]

1 голос
/ 16 августа 2010

Этот запрос должен сделать необходимый:

select * 
from answers where question_id = X
order by 
  (points = (select max(points) from answers where question_id = X)) desc,    
  created_at asc
0 голосов
/ 16 августа 2010

Я бы написал что-то вроде:

SELECT id, count(id) as C FROM answers group by id order by C desc limit 10 

(ограничение 10, только если вам нужно конкретное число)

Затем вы можете перебрать результат, поместив каждый в массив:

$all = array ();
while ( $rs = mysql_fetch_array ( $r, MYSQL_ASSOC ) )
{
    $all[$rs['id']] = $rs['C'];
}

$best = array_shift($all);

// echo the best one here

// loop over the rest

foreach ( $all as $id => $count )
{
    // display code here
}
...