2010-12-14 2 views
0

도와주세요. 내가 같이 세 개의 테이블을 데세 테이블에 대한 복잡한 쿼리를 작성하는 방법은 무엇입니까?

, 그래서 이에 대한 메시지 모델 HABTM 관계를 사용하고

Users:id,name.... 

Message:id,title.... 

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

,

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 쿼리를 작성하려면 로그인 한 특정 사용자에게 메시지를 보낸 사용자의 모든 친구 이름

나는 사용자가 로그인 할 때 그는 보낸 사람의 이름을 wid에 표시 한 메시지 목록을 받게됩니다.

messages_controller에서 어떻게 작성하나요?

사람이 어떤 생각을 가진 경우 나 주시기 바랍니다 ..

답변

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 

사용 메시지 테이블은 불필요하며 코드가 상당히 느리게 실행됩니다.

데이터베이스가 정상적으로 정규화되지 않았 음을 유의하십시오. 사용자가 동일한 메시지를 수신자가 아닌 여러 수신자에게 보낼 수 있다고하더라도 여러 사용자가 동일한 메시지를 보낼 수 있다고 상상할 수는 없습니다.

관련 문제