Zend_Db_Select: nerede fıkra yeniden toparlanıyor koşulları

3 Cevap php

Ben böyle bir şey yapmak istiyorum:

$select = $myTbl->select()
->from('download_log')
->joinLeft(...... etc........
->joinLeft(...... etc........
->joinLeft(...... etc........);

//Filter all configured bots (Google, Yahoo, etc.)
if(isset($this->_config->statistics->bots)){
 $bots = explode(',',$this->_config->statistics->bots);
 foreach ($bots as $bot){
  $select = $select->where("user_agent NOT LIKE '%$bot%'");
 }
}

$select = $select->where("download_log.download_log_ts BETWEEN '".$start_date." 00:00:00' AND '".$end_date." 23:59:59'");

Ama outputed sorgu çünkü orWhere hükümlerin doğru değil benzersiz bir AND yan tümcesinde gruplanmış değildir. Bu parentheres bir çift hükümler GİBİ DEĞİL bu regrouped mümkün olup olmadığını bilmek istiyorum.

Benim geçerli alternatif şudur:

  //Filter all configured bots (Google, Yahoo, etc.)
  if(isset($this->_config->statistics->bots)){
   $bots = explode(',',$this->_config->statistics->bots);
   foreach ($bots as $bot){
    $stmt .= "user_agent NOT LIKE '%$bot%' AND ";
   }
   $stmt = substr($stmt,0,strlen($stmt)-4); //remove the last OR
   $select = $select->where("($stmt)");
  }

Teşekkürler!

3 Cevap

Geçerli alternatif en iyi seçenek gibi görünüyor. Burada biraz değişmiş versiyonu wich $ botlara sadece durumda kötü bir şey fişleri alıntı doğru kullanır bulunuyor

$botWhere = '';
foreach ($bots as $bot){
    $botWhere .= $myTbl->getAdapter()->quoteInto('user_agent NOT LIKE ? AND ', "%$bot%");
}
$botWhere = trim($botWhere, ' AND ');
$select = $select->where($botWhere);

Teşekkürler! Sonunda bunu böyle yaptım:

//Filter all configured bots (Google, Yahoo, etc.)
if(isset($this->_config->statistics->bots)){
        $bots = explode(',',$this->_config->statistics->bots);
        foreach ($bots as $bot){
                $stmt .= $myTbl->getAdapter()->quoteInto("user_agent NOT LIKE ? AND ",%$bot%);
        }
        $stmt = trim($stmt, ' AND '); //remove the last AND
        $stmt .= 'OR user_agent IS NULL';
        $select = $select->where("($stmt)");
}

Zend_Db_Select sizin aradığınız ne orWhere fıkra destekler.