开发者

doctrine 2, how can I order this?

开发者 https://www.devze.com 2023-02-21 10:49 出处:网络
How can I order this in doctrine 2? I can\'t even do an approximation.. tables: book ---- id title vote ----

How can I order this in doctrine 2? I can't even do an approximation..

tables:

book
----
id
title

vote
----
id
book_id
value

author
----
id
name

book_author
----
book_id
author_id

What I have is an id from author, so I have to return the books ordered by votes. Ordering something like this ORDER BY (SUM(v.value) / COUNT(v)) and GROUP BY v.book_id .. but I have no idea how to do all the connections between the tables.. for example a simple connection for return the books from an autho开发者_StackOverflowr will be something like this:

SELECT b FROM Entity\Book b JOIN b.authors a WHERE a.id = {$author->id}

.. but how I can put votes here? Some suggestions?

Cheers


Well.. finnally I solved doing a sql like this:

$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');

Maybe will be useful for someone, cheers.

0

精彩评论

暂无评论...
验证码 换一张
取 消