2012-02-20 2 views
0
SELECT M.msg_id, M.uid_fk, M.message, M.created, 
U.fname, U.lname, M.uploads 
FROM messages M, users_friends F, users U 
WHERE M.uid_fk=F.friendID 
and F.userID = '5' 
and status='2' 

친구와의 메시지 (업데이트)를 수집하고 싶습니다.다중 테이블 쿼리 - 친구 업데이트 받기

위의 쿼리는 테이블에 사용자 5의 메시지가 있는지 확인했지만 빈 세트를 반환합니다.

스키마 :

CREATE TABLE IF NOT EXISTS `messages` (
    `msg_id` int(11) NOT NULL AUTO_INCREMENT, 
    `message` varchar(200) CHARACTER SET utf8 DEFAULT NULL, 
    `uid_fk` int(11) DEFAULT NULL, 
    `ip` varchar(30) DEFAULT NULL, 
    `created` int(11) DEFAULT '1269249260', 
    `uploads` varchar(30) DEFAULT NULL, 
    PRIMARY KEY (`msg_id`), 
    KEY `uid_fk` (`uid_fk`) 
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=263 ; 


CREATE TABLE IF NOT EXISTS `users` (
    `fname` varchar(15) NOT NULL, 
    `lname` varchar(15) NOT NULL, 
    `userID` int(11) NOT NULL AUTO_INCREMENT, 
    `username` varchar(23) NOT NULL, 
    `email` varchar(50) NOT NULL, 
    `password` varchar(32) NOT NULL, 
    `DOB` date DEFAULT NULL, 
    `sex` varchar(1) DEFAULT NULL, 
    `about` text NOT NULL, 
    `location` varchar(20) DEFAULT NULL, 
    `last_login` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, 
    `user_level` int(11) NOT NULL DEFAULT '0', 
    `profile_image` varchar(200) NOT NULL, 
    `profile_image_small` varchar(200) NOT NULL, 
    PRIMARY KEY (`userID`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=19 ; 


CREATE TABLE IF NOT EXISTS `users_friends` (
    `userID` int(11) NOT NULL, 
    `friendID` int(11) NOT NULL, 
    `status` int(1) NOT NULL DEFAULT '0', 
    PRIMARY KEY (`userID`,`friendID`), 
    KEY `fk_users_has_friends_users1` (`userID`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

답변

1

당신은 → '5'& '2'WHERE 절에 INT 값을 인용 하나입니다.

또한 JOIN을 시도하십시오.

SELECT M.msg_id, 
     M.uid_fk, 
     M.message, 
     M.created, 
     U.fname, 
     U.lname, 
     M.uploads 
FROM messages M 
INNER JOIN users_friends F ON F.friendID = M.uid_fk 
    AND F.userID = 5 
    AND F.status = 2 
INNER JOIN users U ON U.userID = F.friendID; 
+0

# 1064 - SQL 구문에 오류가 있습니다. 올바른 구문을 보려면 MySQL 서버 버전에 해당하는 설명서를 확인하십시오. 'INNER JOIN users_friends F ON F.friendID = M.uid_fk AND F.userID = 5 AN'9 번 라인 근처에서 사용하십시오. –

+0

Nevermind, 방금 쉼표로 남았습니다. INNER JOIN 전에 거기 있으면 안됩니다. 그것은 작동합니다! –

+0

@BrianByrne Yup은 M. 뒤에 여분의 쉼표가 붙습니다. – Timeout