Доктрина 2, как я могу заказать это? - PullRequest
0 голосов
/ 30 марта 2011

Как я могу заказать это в доктрине 2? Я даже не могу сделать приближение ..

таблица:

book
----
id
title

vote
----
id
book_id
value

author
----
id
name

book_author
----
book_id
author_id

У меня есть идентификатор автора, поэтому я должен вернуть книги, упорядоченные по голосам. Заказывая что-то вроде этого ORDER BY (SUM (v.value) / COUNT (v)) и GROUP BY v.book_id .. но я понятия не имею, как сделать все соединения между таблицами .. например, простое соединение для возврата книги от автора будут примерно такими:

ВЫБРАТЬ b ИЗ СУЩЕСТВА \ Book b СОЕДИНИТЬ b.authors a ГДЕ a.id = {$ author-> id}

.. но как я могу поставить голоса здесь? Некоторые предложения?

Приветствия

1 Ответ

1 голос
/ 19 августа 2011

Ну ... в конце концов я решил сделать 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');

Может быть, кому-то это пригодится, ура.

...