在php中获取最大值(而不是mysql)

在php中获取最大值(而不是mysql),php,mysql,Php,Mysql,我有两个msyql表,徽章和事件。我使用联接查找所有事件,并使用以下代码返回该事件的徽章信息(标题和说明): 选择计数(徽章.徽章ID)作为 徽章数量、头衔、徽章说明 从徽章加入事件开启 Badges.badge_id=事件.badge_id组 按标题ASC 除了计数之外,我还需要知道条目最多的事件的值。我想我应该在php中使用max()函数来实现这一点,但我很难让它正常工作。因此,我决定通过使用“ORDER by badgecount DESC LIMIT 1”修改上述查询来获得相同的结果,该

我有两个msyql表,徽章和事件。我使用联接查找所有事件,并使用以下代码返回该事件的徽章信息(标题和说明):

选择计数(徽章.徽章ID)作为 徽章数量、头衔、徽章说明 从
徽章
加入
事件
开启 Badges.badge_id=事件.badge_id组 按标题ASC

除了计数之外,我还需要知道条目最多的事件的值。我想我应该在php中使用max()函数来实现这一点,但我很难让它正常工作。因此,我决定通过使用“ORDER by badgecount DESC LIMIT 1”修改上述查询来获得相同的结果,该查询返回单个元素的数组,其值是所有事件的最高计数总和

虽然这个解决方案对我来说很好,但我很好奇,是否需要更多的资源来对服务器进行两次调用(b/c,我现在使用两个查询),而不是用php进行计算。如果我在php中这样做了,我如何在关联数组中获得特定项的最大值(如果可能,最好能够返回键和值)

编辑: 好吧,休息几个小时对大脑的作用真是太神奇了。今天早上我打开了我的代码,对代码做了一个简单的修改,这对我来说是可行的。我只是在count字段上创建了一个变量,如果新变量大于旧变量,则将其更改为新值(请参阅以下代码中的“if”语句):

如果($c>$highestCount){ $highestCount=$c;}


这可能会再次导致一场“宗教战争”,但我同意两个问题。对我来说,在数据库中尽可能多地进行数据处理更为干净。从长远来看,查询缓存等。。将消除额外查询造成的开销

无论如何,要在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;
}
getMax($results){
如果(计数($results)==0){
返回NULL;
}
$max=重置($results);
对于($results作为$elem){
如果($max<$elem){//需要在此处进行特定比较
$max=$elem;
}
}
返回$max;
}

这可能再次导致“宗教战争”,但我会选择两个版本。对我来说,在数据库中尽可能多地进行数据处理更为干净。从长远来看,查询缓存等。。将消除额外查询造成的开销

无论如何,要在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;
}
getMax($results){
如果(计数($results)==0){
返回NULL;
}
$max=重置($results);
对于($results作为$elem){
如果($max<$elem){//需要在此处进行特定比较
$max=$elem;
}
}
返回$max;
}

我同意2个查询的方法。数据库调用在排序方面非常快(只要列被索引),并且在内存方面效率更高。基于index参数(这可能意味着db引擎甚至不会点击磁盘读取所有这些值),如果数据库服务器位于不同的计算机上,这也可以节省通信量。注意微观管理优化:)这与我今天早上所做的类似。另外,感谢您对查询方法的意见。我知道这篇后续文章可能属于另一个问题(可能已经得到了回答),但测试哪种方法的“最佳”方式是哪种?实现两个版本,然后使用apache benchmark或类似的方法,模拟现实生活中的使用情况,对这两个版本进行压力测试。我同意2查询方法。数据库调用在排序方面非常快(只要列被索引),并且在内存方面效率更高。基于index参数(这可能意味着db引擎甚至不会点击磁盘读取所有这些值),如果数据库服务器位于不同的计算机上,这也可以节省通信量。注意微观管理优化:)这与我今天早上所做的类似。另外,感谢您对查询方法的意见。我知道这篇后续文章可能属于另一个问题(并且可能已经得到了回答),但测试哪种方法的资源密集度最低的“最佳”方法是什么?实现这两个版本,然后使用apache基准或类似的工具对这两个版本进行压力测试,模仿现实生活中的使用。检查不到15分钟前提出的一个非常类似的问题:如果您担心(读取)性能,您是否考虑过在创建新条目时计算和存储冗余信息?检查不到15分钟前提出的一个非常类似的问题:如果您担心(读取)在创建新条目时,您是否考虑过计算和存储冗余信息?