私はちょうどphpとmysqlを始めています。私は自分のデータベースから2つのクエリを持っています。最初に、lifestylesというテーブルを照会し、foreachループを実行してその行の各項目を出力します。これらの行にはそれぞれ、メンバーがコメントを投稿するためのコメントボックスがあります。 commentsテーブルには、ライフスタイル行のpostidという連想カラムがあります。だから、私は、ライフスタイルの各行の下にこれらのコメントを表示するために、前のループ内で別のforeachループを実行しました。 問題は、各コメントが各ライフスタイルクエリの回数だけ複製されることです。 以下を参照してください。mysqlの複数のテーブルからのネストされたforeachループクエリの問題
Title: TEST
Date: 28th-Jun-2011 at 10:10 PM
TEST LIFESTYLE POST
Comments
TEST COMMENT
TEST COMMENT
TEST COMMENT
TEST COMMENT
TEST COMMENT
TEST COMMENT
TEST COMMENT
TEST COMMENT
TEST COMMENT
TEST COMMENT
TEST COMMENT
やコード:私はすべての日にしようとしている
<?php
$lifestyles=dbAll("select * from user_accounts, lifestyle where lifestyle.category=1 and lifestyle.user_id=user_accounts.id order by cdate DESC");
if(!$lifestyles){
echo '<em><strong>No Posts yet. Why don\'t you be the first!</strong></em>';
}
else{
foreach($lifestyles as $lifestyle){
$lifestyleid=(int)$lifestyle['id'];
echo '<form class="postform" method="post" action="shopping.php?redirect='.$_SERVER["PHP_SELF"].'">';
echo '<input type="hidden" name="postshop" value="1" />';
echo '<input type="hidden" name="postid" value="'.$lifestyleid.'" />';
echo '<table class="postinfo"><tr><th>Title:</th><td style="font-weight:bold">'.$lifestyle['title'].'</td>
</tr>';
echo '<th>Date:</th><td>'.date('dS-M-Y', strtotime($lifestyle['cdate'])).' at'.' '.date('g:h A', strtotime($lifestyle['cdate'])).'</td>
<th>By:</th><td>'.$lifestyle['firstname'].' '.$lifestyle['lastname'].'</td>';
echo '</table>';
echo '<div class="postbody"><table>';
echo '<tr><td>'.$lifestyle['body'].'</td><td></td></tr>'.'</table></div>';
$comments=dbAll("select * from comments,lifestyle where comments.postid=$lifestyleid and section_id=1 order by commentdate DESC");
echo '<div class="comment">';
echo '<table><tr><th>Comments</th></tr>';
**foreach($comments as $comment)
{
echo '<tr><td>'.$comment['commentbody'].'</td></tr>';
}**
echo '<tr><td><textarea rows="1" title="Write a comment" name="comment" placeholder="Write a comment..."></textarea></td></tr>';
echo '</table></div>';
echo '<input type="submit" name="action" value="Save Comment" />';
echo '<hr />';
echo '</form>';
}
}
?>
、助けてください。
このようなループで相関クエリを決してネストしないでください。データベースに接続し、クエリを送信し、結果セットを生成し、その結果セットをアプリケーションに送り返すことは費用がかかります。一度やり直してください。何度もループしないでください。 1つのクエリで3つのテーブルをすべて結合して、「ライフスタイル」とすべての関連する「コメント」をまとめて取得することができます。結果をライフスタイルとコメント日付順に並べ、アプリケーション側のコメントグループごとに1回だけライフスタイルを印刷します。 –