2015-06-24 78 views
0

我想從類別$ cat中只選擇表中的$ limit記錄。TYPO3 Extbase:合併多個查詢

foreach($cats as $cat) { 
    $query = $this->createQuery(); 
    $query->matching($query->equals('type', $cat)); 
    $query->setLimit((int)$limit); 
    $result[] = $query->execute(); 
} 

是否可以將查詢結果合併爲一個查詢結果?

回答

2

我覺得您的查詢是一樣的東西,

"SELECT * FROM table_name WHERE type IN ('".$cats."')" 

這裏$貓的類別,如數組,

$cats = array("cat1", "cat2", "cat3"); 

然後extabse查詢將是

$query = $this->createQuery(); 
$query->matching($query->in('type', $cats)); 
$query->setLimit((int)$limit); 
$result = $query->execute(); 

在()中的上述查詢中檢查多值操作數中是否存在單值屬性。

欲瞭解更多詳情,請參閱:http://docs.typo3.org/typo3cms/ExtbaseFluidBook/6-Persistence/3-implement-individual-database-queries.html

1

謝謝,我發現另一種方式爲我工作:

public function findAllLimitedByCategory($limit, $category){ 


    $cats = explode(",",$category); 
    $result = array(); 

    foreach($cats as $cat) { 
     $query = $this->createQuery(); 
     $query->matching($query->equals('type', $cat)); 
     $query->setLimit((int)$limit); 
     $result[] = $query->execute()->toArray(); 
    } 

    $out = array(); 

    foreach($result as $r) 
     $out = array_merge($out, $r); 

    return $out; 
} 

...但我必須通過PHP數組這種解決方案排序

+0

Ralf基於結果數組中的任何字段,需要什麼樣的排序... –

+0

我按日期排序數組 public function SortObjectByDatum($ arr){ \t usort($ arr,functi上($一個,$ B){ \t \t \t 如果\t($ A-> getDatum()== $ B-> getDatum()){ \t \t返回0; \t \t} \t \t return($ a-> getDatum()> $ b-> getDatum())? -1:1; \t}); \t return $ arr; \t} – Ralf

+0

如果您只想得到每個類別的幾個結果,這是首選解決方案。 'usort()'仍應該表現良好。 要做到這一點只有一個查詢,你需要在你的語句或子查詢中使用UNION,但兩者都不被extbase支持。你需要手動建立你的查詢並使用'$ query-> statement()'來執行它,但它更復雜,只有少數結果沒有任何性能優勢。所以我不會推薦它。 –