(yerine MySQL) php max değeri olsun

1 Cevap php

Ben iki msyql tablo, rozetleri ve Olaylar var. Ben kullanmak tüm olayları bulmak ve aşağıdaki kodu kullanarak bu olayın (başlık ve açıklama) için rozet bilgi döndürmek için join:

SELECT COUNT(Badges.badge_ID) AS badge_count,title,Badges.description FROM Badges JOIN Events ON Badges.badge_id=Events.badge_id GROUP BY title ASC

Maddeye ek olarak, ben en çok girişleri ile olayın değerini bilmek gerekir. Ben max () fonksiyonu ile php bunu düşündüm, ama bu doğru işe giderken sorun vardı. Yani, ben, değeri tüm olayların en yüksek sayısı toplam tek bir elemanın bir dizi döndüren ", badgecount DESC LIMIT 1 ORDER BY" Ben kullanarak yukarıdaki sorguyu değiştirerek aynı sonucu alabilir verdi.

Bu çözüm benim için iyi çalışıyor olsa da yerine php dışarı çalışma (b / c şimdi iki sorgu kullanıyorum) sunucuya 2 arama yapmak için daha fazla kaynak alıyor, ben merak ediyorum. Ben php bunu yaptın, nasıl ben (eğer mümkünse, anahtar ve değerini iade edebilmek güzel olurdu) bir ilişkisel dizi içinde belirli bir öğenin max değeri alabilir?

EDIT: OK, it's amazing what a few hours of rest will do for the mind. I opened up my code this morning, and made a simple modification to the code, which worked out for me. I simply created a variable on the count field and, if the new one was greater than the old one, changed it to the new value (see the "if" statement in the following code):

if ( $c > $highestCount ) { $highestCount = $c; }

1 Cevap

Bu yine bir "din savaşı" yol açabilir, ama ben iki sorgu sürümü ile gitmek istiyorum. Benim için mümkün olduğunca veritabanında işleme veri var temizleyicidir. Olarak uzun vadede, sorgu önbelleğe alma, vb. Olur hatta ekstra sorgusu kaynaklanır yükü dışarı.

Neyse, PHP max almak için, sadece $ sonuçları dizinin üzerinde yinelemek gerekiyor:

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;
}