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>
<?}
?>
こんにちは、あなたのコードはすばらしい解決策のように見えますが、cu.nameには何が関係していますか?ポストp /コメントcとユーザーcu?私はmysqlが初めてです。 – ChrisSherwood
p、c、およびcuはエイリアスです。後でそれらを使用して列を識別することができます。このようにして、 'user'テーブルに別々にエイリアスを付けるので、問題なしで' user'テーブルに2回参加することができます。 – Eric