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

发布于 2024-10-08 03:37:01 字数 710 浏览 2 评论 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 查询来获取已向特定登录使用发送消息的用户的所有朋友的姓名。

我,e....当用户登录时,他将获得他收到的消息列表以及发件人的姓名。

如何在 messages_controller 中为此编写查询?

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

Please help me.

I am having three tables as,

Users:id,name....

Message:id,title....

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

So i am using HABTM relation in message model for this as,

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")')
    )
);

So now i want to write a sql query to fetch the name of all the friends of the user who has sent messages to that particular logged in use.

i,e....when the user log in he will get list of messages he got along wid the name of the senders.

how to write query for this in messages_controller??

please let me if anybody is having any idea..

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

蛮可爱 2024-10-15 03:37:01

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

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

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

I've no idea how the ORM works in cackephp, but the query you need is....

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

i.e. using the messages table is unnecessary and will make your code run significantly slower.

Note that the database is NOT properly normalized - even if a user can send the same message to multiple recipients (not receivers), I can't imagine that multiple users can send the same message.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文