2012-08-23 74 views
0

我在教条2上遇到了一些麻烦。我想订购一个查询,但一周中的某一天。Doctrine2 select by orderby(case when)

这是什么意思:

如果这里给出的日期当天是Tuesday,我想拥有它通过Tuesday, Wednseday, ..., Sunday, Monday订购。

但是表现可能有多天。

我来到这里的代码确实被

public function getValidPerformancesByDay2($date, $max = 25, $from, $asSql = false){ 

    $myday = intVal(date('w',strtotime($date))); 
    $q = $this->getEntityManager() 
      ->createQueryBuilder() 
      ->select('DISTINCT textdesc, 
       CASE WHEN (perfdays.id < '. $myday .') THEN perfdays.id + 8 
        ELSE perfdays.id END AS HIDDEN sortvalue') 
      ->from ('sys4winsegundaBundle:Performance','textdesc') 
      ->join('textdesc.days', 'perfdays') 
      ->where ('textdesc.enddate >= :date') 
      ->andWhere('textdesc.isvalid = true') 
      ->orderBy('sortvalue','ASC') 
      ->setMaxResults($max) 
      ->setFirstResult($from) 
      ->setParameter('date',$date) 
      ; 

    $query = $q->getQuery();     
    if ($asSql){ 
     return $query; 
    } 

    return $query->getResult(); 
} 

但该订单的招不幸的是,当我看着已经发送它的查询是:

SELECT DISTINCT p0_.id AS id0, p0_.name AS name1, p0_.duration AS duration2, 
p0_.addedby AS addedby3, p0_.startdate AS startdate4, p0_.enddate AS enddate5, 
p0_.starthour AS starthour6, p0_.flyer AS flyer7, p0_.price AS price8, 
p0_.discount AS discount9, p0_.isvalid AS isvalid10, 
p0_.archivedon AS archivedon11, p0_.description AS description12, 
p0_.weblink AS weblink13, p0_.techinfo AS techinfo14, p0_.slug AS slug15, 
CASE WHEN (d1_.id < 4) THEN d1_.id + 8 ELSE d1_.id END AS sclr16, 
p0_.place_id AS place_id17, p0_.gallery_id AS gallery_id18 FROM performances 
p0_ INNER JOIN performance_day p2_ ON p0_.id = p2_.performance_id 
INNER JOIN days d1_ ON d1_.id = p2_.day_id WHERE p0_.enddate >= ? AND 
p0_.isvalid = 1 ORDER BY sclr16 ASC OFFSET 0 
Parameters: ['2012-08-23'] 
Time: 5.13 ms 

这意味着如果表演一周发生3次,我发生3次。

有人有想法吗?


编辑 我的英语是非常糟糕的,我lltry以不同的方式解释: 嗯,我得到了在不同天发生文艺演出。

我想要做的是按时间顺序排列它们。 但我发送到数据库的方式是与一个开始日期,结束日期,然后它发生在几天(星期二,星期三...)

我的查询做到了这一点(按最近的一个排序),但作为一些表现发生例如在星期三和星期五,我的查询将返回该表演2次(星期三和星期五),而我应该只检索每个表演的发生,但具有相同的顺序(最近的第一个)

回答

0

如果你每周需要1次使用

$q->groupBy() 

将日期转换为周数。并在你的选择中使用count()。我不确定我是否理解你的问题。

+0

那么我得到了不同日子发生的艺术表演。 –