2011-06-13 153 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()添加更多连接和其他条件,因为上面将被视为子查询。