2010-12-14 2 views
0

Пожалуйста, помогите мне.Как написать сложный запрос для трех таблиц?

Я имею три таблицы, как,

Users:id,name.... 

Message:id,title.... 

Messages_Users:id,message_id,sender_id,receiver_id...... 

Так я использую HABTM соотношение в модели сообщения для этого, как,

var $hasAndBelongsToMany = array(
    'Users' => array (
     'className' => 'User', 
     'join_table' => 'messages_users', 
     'foreignKey' => 'message_id', 
     'associationForeignKey' => 'reciever_id', 
     'conditions'=> array('MessagesUser.reciever_id => $this->Session->read("Id")') 
    ) 
); 

Так что теперь я хочу написать запрос SQL для извлечения имя всех друзей пользователя, отправившего сообщения, которые были использованы для входа в систему.

i, e .... когда пользователь войдет в систему, он получит список сообщений, которые он получил, с расширением имени отправителей.

как написать запрос для этого в messages_controller ??

пожалуйста, сообщите мне, если кто-нибудь, имеющий какие-либо идеи ..

ответ

0

Я понятия не имею, как ОРМ работает в cackephp, но запрос вам нужно ....

SELECT users.name, users.id, COUNT(*) 
FROM users, message_users 
WHERE users.id=message_users.sender_id 
AND message_users.receiver_id=$current_user_id 
GROUP BY users.name, users.id 
ORDER BY COUNT(*) DESC 

т.е. с использованием таблица сообщений не нужна, и ваш код будет работать значительно медленнее.

Обратите внимание, что база данных НЕ правильно нормализована - даже если пользователь может отправить одно и то же сообщение нескольким получателям (не получателям), я не могу представить, что несколько пользователей могут отправлять одно и то же сообщение.