Nasıl optimize: db sorgusu yeterli sonuç vermezse, sorgu B çalıştırmak?

0 Cevap php

Ben en iyi performans ve en az yük ile, "bu sorgu veya başka diğer sorgu ya" bir durumu elde etmek için iyi bir tasarım deseni arıyor, ya da en iyi uygulama duyuyorum.

Business logic/program of demans says "all items since Foo", unless that returns less then three items, then "all items". I am refactoring the current code, and cannot come up with a good way to achieve this logic.

Şu sözde kodu (Drupal / PHP):

<?php
$result = db_query(
'SELECT n.uid FROM og_ancestry oga ' .
'INNER JOIN node n on n.nid = oga.nid ' .
'WHERE oga.group_nid = %d AND n.created > %d GROUP BY n.uid ' .
'ORDER BY cnt DESC LIMIT %d', $group_nid, $since, $limit);


while ($row = db_fetch_array($result)) {
  $uids[] = $row['uid'];
}

if (count($uids) < 3) {
  $result = db_query(
    'SELECT n.uid FROM og_ancestry oga ' .
    'INNER JOIN node n on n.nid = oga.nid ' .
    'WHERE oga.group_nid = %d GROUP BY n.uid ' .
    'ORDER BY cnt DESC LIMIT %d', $group_nid, $limit);

  while ($row = db_fetch_array($result)) {
    $uids[] = $row['uid'];
  }
}
//...do something with the result.
?>

Bu kod, çünkü kuru her şeyden önce, "doğru değil" hissediyor: aynı sorguyu içeren, bir küçük farkla. Ben biraz daha akıllı sorgu-bina ile değiştirebilirsiniz.

Ama daha da kötüsü ben veritabanı (sorgu oldukça ağır), sadece vakaların daha sonra yarısında, ben sonuç atmak ve tekrar db sorgulamak gerektiğini öğrenmek için çekiç gereken gerçektir.

Nasıl böyle bir davayı yaklaşım?

0 Cevap