2011-12-28 9 views
1

私は3つのテーブル(ユーザー、投稿、コメント)を結成しています(ある程度はやっているajaxのソーシャルネットワークのためです)。MySql - 3つのテーブルが正常に結合されましたが、1つのカラム結果が得られませんでしたか?

これまでのところとても良いですが、私はそれらをループすると、1つを除いてすべての結果が得られます。投稿にコメントした人(コメントテーブル内に格納されている)への参照は、数字のID(ユーザーテーブルに結合する必要がありますが、私の参加は明らかに正しく機能していません)

ご協力いただきありがとうございます。おそらく私はこの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 ; 

コード:$row['CommentName']なるべき

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']

 $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

まず、あなたのクエリは、このする必要があります。

元のクエリは、元のポスターが作成したコメント(参加条件)を取得するだけです。 userテーブルに参加して元のポスターではなく、コメントのポスターを取得したいとします。

+0

こんにちは、あなたのコードはすばらしい解決策のように見えますが、cu.nameには何が関係していますか?ポストp /コメントcとユーザーcu?私はmysqlが初めてです。 – ChrisSherwood

+0

p、c、およびcuはエイリアスです。後でそれらを使用して列を識別することができます。このようにして、 'user'テーブルに別々にエイリアスを付けるので、問題なしで' user'テーブルに2回参加することができます。 – Eric

関連する問題