Как написать сложный запрос для трех таблиц? - PullRequest
0 голосов
/ 14 декабря 2010

Пожалуйста, помогите мне.

У меня три таблицы как,

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 голосов
/ 14 декабря 2010

Я понятия не имею, как работает 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

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

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

...