如何为三个表编写复杂查询?

时间:2010-12-14 07:06:14

标签: php mysql models cakephp-1.3

请帮帮我。

我有三张桌子,

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中编写查询?

如果有人有任何想法,请告诉我..

1 个答案:

答案 0 :(得分:0)

我不知道ORM在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

即。使用消息表是不必要的,这将使您的代码运行速度明显变慢。

请注意,数据库未正确规范化 - 即使用户可以向多个收件人(不是收件人)发送相同的邮件,我也无法想象多个用户可以发送相同的邮件。