получить максимальное значение в php (вместо mysql) - PullRequest
0 голосов
/ 28 августа 2009

У меня есть две таблицы msyql: значки и события. Я использую объединение, чтобы найти все события и вернуть информацию о значке для этого события (название и описание), используя следующий код:

SELECT COUNT (Badges.badge_ID) AS badge_count, название, Badges.description ОТ Badges ПРИСОЕДИНЯЙТЕСЬ Events ВКЛ Badges.badge_id = Events.badge_id GROUP BY title ASC

В дополнение к подсчетам, мне нужно знать значение события с наибольшим количеством записей. Я думал, что я сделаю это в php с функцией max (), но у меня были проблемы с настройкой, чтобы это работало правильно. Итак, я решил, что могу получить тот же результат, изменив вышеуказанный запрос, используя «ORDER BY badgecount DESC LIMIT 1», который возвращает массив из одного элемента, значение которого является наибольшим количеством всех событий.

Хотя это решение хорошо работает для меня, мне любопытно, потребовалось ли больше ресурсов для двух вызовов к серверу (т.к. я сейчас использую два запроса) вместо того, чтобы работать в php. Если бы я делал это в php, как я мог получить максимальное значение определенного элемента в ассоциативном массиве (было бы неплохо иметь возможность вернуть ключ и значение, если это возможно)?

EDIT: Хорошо, это удивительно, что несколько часов отдыха сделают для ума. Я открыл свой код этим утром и сделал простую модификацию кода, которая сработала для меня. Я просто создал переменную в поле count и, если новый был больше старого, изменил его на новое значение (см. Инструкцию «if» в следующем коде):

if ($ c> $ наибольший счет) { $ самое высокое количество = $ с; }

1 Ответ

4 голосов
/ 28 августа 2009

Это может снова привести к "религиозной войне", но я бы остановился на версии с двумя запросами. Для меня чище иметь обработку данных в базе данных в максимально возможной степени. В долгосрочной перспективе кэширование запросов и т. Д. Сгладит накладные расходы, вызванные дополнительным запросом.

В любом случае, чтобы получить максимум в PHP, вам просто нужно перебрать свой массив $ results:

getMax($results) {
  if (count($results) == 0) {
    return NULL;
  }

  $max = reset($results);
  for($results as $elem) {
    if ($max < $elem) {  // need to do specific comparison here
      $max = $elem;
    }
  }
  return $max;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...