2011-06-13 46 views
6

假設我有一個表:學生如何將GROUP_CONCAT與Zend Framework結合使用?

______________________________________________________ 
|id | name   | school  | class  | 
______________________________________________________ 
| 1 | John   | ABC   | C1   | 
| 2 | Jack   | ABC   | C1   | 
| 3 | Anna   | ABC   | C1   | 
| 4 | Peter   | DEF   | D1   | 
| 5 | Alex   | ABC   | C2   | 
| 6 | Bryan   | ABC   | C2   | 
| 7 | David   | ABC   | C2   | 
| 8 | Cristian  | DEF   | D1   | 
_______________________________________________________ 

使用此查詢:

SELECT a.class,GROUP_CONCAT(a.name) as names FROM students a WHERE a.school='ABC' GROUP BY a.class 

給我這樣的結果:

____________________________ 
|class | names    | 
____________________________ 
| C1 | John, Jack, Anna | 
| C2 | Alex, Bryan, David| 
____________________________ 

我如何通過執行Zend框架此查詢使用Zend_Db_Table或Zend_Db_Select? 非常感謝!

回答

12

我想它會是這樣的。嘗試一下。

$table = Your_DbTable_Class(); 
$select = $table->select() 
      ->setIntegrityCheck(false) 
      ->from(array('a' => 'students'), array('class' => 'class' , 'names' => new Zend_Db_Expr('GROUP_CONCAT(a.name)'))) 
      ->where('a.school = ?', 'ABC') 
      ->group('a.class'); 

當我組裝它,它給了我下面的查詢:

SELECT `a`.`class`, GROUP_CONCAT(a.name) AS `names` FROM `students` AS `a` 
WHERE (a.school = 'ABC') 
GROUP BY `a`.`class` 

是不是你在找什麼?

+0

感謝您的快速回復。我會嘗試的。 – 2011-06-13 12:37:52

0

Zend的表達了我的問題,對我來說,最簡單的方法是:

$select->from($this, 
    array(
     'listings.*', 
     '(SELECT GROUP_CONCAT(DISTINCT ecg.listing_cat_name,"*|*",ecg.listing_cat_id SEPARATOR "-|-") FROM listings_cats AS ecg 
LEFT JOIN listings_to_listings_cats ON listings_to_listings_cats.listing_cat_id=ecg.listing_cat_id 
WHERE listings_to_listings_cats.listing_id=listings.listing_id 
LIMIT 7) AS catGrouping')) 

在這裏,我串聯類別名稱和ID的列表,這是我在我的搜索結果爆炸和打印的可點擊列表每個父記錄的子類別。 你可以明顯地向from()添加更多連接和其他條件,因爲上面將被視爲子查詢。