【问题标题】:How to write complex query for three tables?如何为三个表编写复杂的查询?
【发布时间】:2010-12-14 07:06:14
【问题描述】:

请帮帮我。

我有三张桌子,

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

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

【问题讨论】:

    标签: php mysql models cakephp-1.3


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-11-30
      • 2015-07-13
      • 2014-12-25
      • 1970-01-01
      • 1970-01-01
      • 2016-04-23
      • 2015-08-04
      相关资源
      最近更新 更多