Использование PHP для заказа результата запроса MYSQL - PullRequest
1 голос
/ 23 июня 2011

У меня есть базовый запрос MySQL:

$getFeed = "SELECT posts.postID, posts.postTitle, .....
FROM posts
LEFT JOIN users ON posts.userID = users.id
LEFT JOIN postScore ON posts.postID = postScore.postID          
GROUP BY posts.postID

$feedResult = mysql_query($getFeed) or die; 
while($row1 = mysql_fetch_array($feedResult)){
    $postOwner = $row1["userID"];
    $postID = $row1["postID"];
    etc...
}               

Так что теперь вот где я застрял.Я хочу упорядочить подачу с использованием PHP с помощью некоторой комбинации голосов, отметки времени и т. Д. По сути, создайте очень простой алгоритм оценки.Мне нужно использовать некоторые из переменных выше, чтобы сделать математику, а затем отобразить результаты по порядку.Как я могу сделать это с помощью PHP?

Другой вопрос, стоит ли делать это на лету с помощью PHP или сохранять алгоритм «Score» в БД, а затем просто упорядочивать по этому столбцу?: Допустим, я сохраняю счет в БД, однако этот «счет» будет основан на алгоритме, который чувствителен ко времени (то есть счет будет меняться с течением времени).Было бы целесообразно создать бэкэнд-скрипт, который запускался с интервалом для обновления всех результатов в БД?

Ответы [ 3 ]

3 голосов
/ 23 июня 2011

Будет намного эффективнее, если вы сможете ранжировать их в MySQL, прежде чем тянуть их. Сортировка средних и больших наборов данных в PHP требует значительных ресурсов.

1 голос
/ 23 июня 2011

Обычно лучше заказать его в БД.По нескольким причинам: 1. Набор результатов может быть слишком большим для процесса php.2. LIMIT и пагинация выполняются быстрее в БД.

Но, если вы действительно хотите сделать это в PHP, тогда

- это шаблон.сначала получите записи в массив, а затем отсортируйте их с помощью одной из функций сортировки php.

while($row1 = mysql_fetch_array($feedResult)){
  $rows[] = $row1;
}
usort($rows, 'mycmp');

function mycmp($a, $b)
{
    if ($a['score'] == $b['score']) {
        return 0;
    }
    return ($a['score'] < $b['score']) ? -1 : 1;
}
0 голосов
/ 23 июня 2011

Если вы хотите сделать это на лету, посмотрите на usort

Если вы хотите сохранить этот «счет» в базе данных, зависит от требований вашего приложения.Это в основном компромисс между объемом памяти и скоростью.Если вы храните его в базе данных, вы теряете место для хранения, но если вы вычисляете его на лету, вы теряете скорость.

Хотя в данном конкретном случае эти небольшие объемы дискового пространства не стоит беспокоитьи ускорение более чем оправдывает его.

Краткий ответ: заранее сохраните счет в базе данных:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...