2011-03-30 18 views
0

如何在教义2中订购?我甚至不能做一个近似..教义2,我该如何命令这个?

表:

book 
---- 
id 
title 

vote 
---- 
id 
book_id 
value 

author 
---- 
id 
name 

book_author 
---- 
book_id 
author_id 

什么我是从作者的ID,所以我要回报以票订的书。订购像这样的ORDER BY(SUM(v.value)/ COUNT(v))和GROUP BY v.book_id ..但我不知道如何做表之间的所有连接..例如一个简单的连接返回从作者的图书将是这样的:

SELECT b。从实体\书b JOIN b.authors一个WHERE a.id = {$作者 - > ID}

..但我怎样才能把在这里投票?一些建议?

干杯

+0

使这种排序部分的实体之间的默认关联? – Tjorriemorrie 2011-05-14 08:13:16

回答

1

嗯.. finnally我解决了做一个这样的SQL:

$sql = "SELECT b2.*, b1.mark FROM (SELECT book_id, SUM(v.value)/COUNT(*) as mark FROM vote v GROUP BY v.book_id) as b1" . 
        " RIGHT JOIN" . 
        " (SELECT * FROM author_book ba JOIN book b ON ba.book_id=b.id WHERE ba.author_id = {$author->id}) as b2 ON b2.id=b1.book_id ORDER BY b1.mark DESC"; 

        $rsm = new \Doctrine\ORM\Query\ResultSetMapping; 
        $rsm->addEntityResult('Project\Entity\Book', 'b'); 
        $rsm->addFieldResult('b', 'id', 'id'); 
        $rsm->addFieldResult('b', 'isbn', 'isbn'); 
        $rsm->addFieldResult('b', 'title', 'title'); 
        $rsm->addFieldResult('b', 'summary', 'summary'); 
        $rsm->addFieldResult('b', 'pages', 'pages'); 
        $rsm->addFieldResult('b', 'price', 'price'); 
        $rsm->addFieldResult('b', 'published_at', 'published_at'); 

也许将是有用的人,欢呼声。