У меня есть схема базы данных, подобная этой:
Моя схема базы данных: http://i.stack.imgur.com/vFKRk.png
Чтобы объяснить контекст: один пользователь пишет одно сообщение. Он может отправить его одному или нескольким пользователям.
Мне удалось получить заголовок сообщения, автора для одного пользователя. Однако Doctrine, которую я использую для этого проекта, делает это с 2-мя запросами. Это немного странно для меня, и я пытаюсь понять, почему. Обычно мы можем сделать это одним SQL-запросом.
Мой DQL-запрос:
$q = Doctrine_Query::create()->select('id_me, users_id_us, state_me, type_me, mc.title_mc, us.login_us') ->from('messages m')->innerJoin('m.messages_content mc')->innerJoin('mc.Users us') ->where('users_id_us = ?', $user)->limit($opt['limit'])->offset($opt['offset'])->orderBy($opt['order']);return $q->fetchArray();
SQL-запросы, возвращаемые Doctrine:
SELECT DISTINCT m3.id_me FROM messages m3 INNER JOIN messages_content m4 ON m3.messages_content_id_mc = m4.id_mc INNER JOIN users u2 ON m4.users_id_us = u2.id_us WHERE m3.users_id_us = '6' ORDER BY m3.id_me DESC LIMIT 2
SELECT m.id_me AS m__id_me, m.users_id_us AS m__users_id_us, m.state_me AS m__state_me, m.type_me AS m__type_me, m2.id_mc AS m2__id_mc, m2.title_mc AS m2__title_mc, u.id_us AS u__id_us, u.login_us AS u__login_us FROM messages m INNER JOIN messages_content m2 ON m.messages_content_id_mc = m2.id_mc INNER JOIN users u ON m2.users_id_us = u.id_us WHERE m.id_me IN ('11') AND (m.users_id_us = '6') ORDER BY m.id_me DESC
Почему мой запрос Doctrine не возвращает такой запрос:
SELECT m.id_me, m.users_id_us, m.state_me, m.type_me, mc.title_mc, u.login_us FROM messages m JOIN messages_content mc ON mc.id_mc = m.messages_content_id_mc JOIN users u ON u.id_us = mc.users_id_us WHERE m.users_id_us = 6;
Есть идеи преобразовать мой DQL-запрос и выполнить его один раз?