2011-12-28 48 views
1

我有三個表(用戶,發佈,評論)加入(爲ajax動力社交網絡的事情,我正在做一個學位)。MySql - 三個成功連接的表,但未能獲得一列結果?

到目前爲止很好,但當我循環他們時,我得到除了一個之外的所有結果。誰評論了一篇文章(存儲在評論表中)的引用僅作爲數字標識(應該加入到用戶表中,但我的加入顯然不能正常工作!)。

非常感謝任何幫助!可能有些簡單,因爲我在這個PHP/mysql遊戲中仍然是新手!

MySQL表:

  CREATE TABLE `post` (
      `pid` int(10) NOT NULL AUTO_INCREMENT, 
      `uid` int(10) NOT NULL, 
      `post` text NOT NULL, 
      `pid_imageurl` varchar(100) NOT NULL, 
      `likes` int(10) NOT NULL, 
      PRIMARY KEY (`pid`) 
      ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 



      CREATE TABLE `user` (
      `uid` int(10) NOT NULL AUTO_INCREMENT, 
      `name` varchar(20) NOT NULL, 
      `password` varchar(20) NOT NULL, 
      `uid_imageurl` varchar(100) NOT NULL, 
      `joindate` varchar(11) NOT NULL, 
      PRIMARY KEY (`uid`) 
      ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=9 ; 


      CREATE TABLE `comments` (
      `cid` int(10) NOT NULL AUTO_INCREMENT, 
      `comment_pid` int(10) NOT NULL, 
      `comment_uid` int(10) NOT NULL, 
      `comment` text NOT NULL, 
      PRIMARY KEY (`cid`) 
      ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ; 

代碼:

 $sql = "SELECT post.post, post.pid_imageurl, post.likes, user.name, comments.comment, 
     user.uid_imageurl, comments.comment_uid 

       FROM post 
       INNER JOIN user 
       ON post.uid=user.uid 
       LEFT JOIN comments 
       ON comments.comment_pid=post.pid 
       AND user.uid=comments.comment_uid 
       "; 

     $result = mysql_query($sql); 



     while($row=mysql_fetch_assoc($result)){?> 
     <ul> 
      <li>User Profile image here:<? echo $row['uid_imageurl']; ?></li> 
      <li>Post:<? echo $row['post']; ?></li> 
      <li>Post by:<? echo $row['name']; ?></li> 
      <li>Post images:<? echo $row['pid_imageurl']; ?></li> 

      <li>post has: <? echo $row['likes']; ?> likes.</li> 
      <li><? echo $row['comment']; ?></li> 
      <li>by: <? echo $row['comment_uid']; ?></li> 
      <!--This is only output as a stored id no rather than users name--!> 




     </ul> 


     <?} 
     ?> 

回答

0

首先,您的查詢應該是這樣的:

SELECT 
    p.post, 
    p.pid_imageurl, 
    p.likes, 
    u.name, 
    c.comment, 
    u.uid_imageurl, 
    cu.name as CommentName 
FROM 
    post p 
    INNER JOIN user u ON 
     p.uid=u.uid 
    LEFT JOIN comments c ON 
     c.comment_pid=post.pid 
    left join user cu on 
     c.comment_uid = cu.uid 

而且$row['comment_uid']應該成爲$row['CommentName']

您的原始查詢只抓取原始海報製作的評論(您的加入條件)。您想再次加入user表格以獲取評論海報,而不是原始海報。

+0

嗨你的代碼看起來像一個很好的解決方案,但是cu.name與什麼關係?和帖子/評論c和用戶cu?我是mysql新手。 – ChrisSherwood 2011-12-29 10:01:51

+0

p,c和cu是別名。它允許您稍後使用它們來識別列。通過這種方式,您可以兩次加入'user'表,而不會出現問題,因爲您將它們的別名區別開來。 – Eric 2011-12-29 13:50:49

相關問題